Im Laufe der Zeit sammeln sich leider durch Rechnertausch, Defekte usw. immer mehr Computerkonten an, zu denen die Rechner gar nicht mehr existieren. Um diese in größerer Stückzahl zu löschen, bietet sich eine Abfrage des Active Directory an. Je nach Betriebssystem der Domänencontroller können dabei unterschiedliche Wege gegangen werden.
Bei einem AD im Modus „Windows 2003 pur“ oder höher kann das Kommandozeilen-Tool „dsquery“ verwendet werden:
dsquery computer -stalepwd 50
Das findet alle Computer, deren Kennwort seit 50 Tagen nicht geändert wurde (weniger ist nicht so sinnvoll, denn schon allein das Intervall zur automatischen Änderung liegt standardmäßig bei 30 Tagen).
Die Ausgabe des Kommandos dann auch direkt in das Kommando „dsrm“ umgeleitet werden, um die Rechner direkt zu löschen:
dsquery computer -stalepwd 50|dsrm -noprompt -c
Erläuterung: Ohne „-noprompt“ würde dsrm zur Bestätigung auffordern und dann, weil ja gleich der nächste Name per Pipe übergeben wird, fehlschlagen. Mit „-c“ wird die Fehlertoleranz eingeschaltet, die alle Ergebnisse anzeigt und nach Fehlern fortfährt. Sonst macht das keinen Spaß, denn es kann vorkommen, dass ein Computer Unterobjekte hat (z.B. ehemals freigegebene Drucker oder Router-Informationen), und dann kann dsrm ihn nicht einfach löschen.
Wenn zunächst eine Liste aller Computer erzeugt werden soll, um die Löschkandidaten herauszufinden, eignet sich eine Abfrage mit AdFind. Folgende Befehlszeile (eine zusammenhängende Zeile!) schreibt alle Computer mit ihrem letzten Anmeldedatum (lastLogonTimestamp) und der letzten Kennwortänderung in eine Datei. Diese kann dann z.B. mit Excel ausgewertet werden:
AdFind -tdcs -csv -default -f "(objectClass=computer)" name pwdLastSet lastLogonTimestamp>Inaktive_Computer.txt
Auch dies funktioniert nur mit dem Native Mode von Windows 2003 oder neuer, weil nur dort das nützliche Attribut „lastLogonTimestamp“ gepflegt wird. Bei einem älteren Verzeichnis kannst du mit einem VBS-Skript suchen:
http://www.rlmueller.net/Last%20Logon.htm
Achtung: In dem Skript musst du diese Zeile:
strFilter = "(&(objectCategory=person)(objectClass=user))"
durch diese ersetzen:
strFilter = "(&(objectCategory=computer)(objectClass=user))"
Das gibt dir auf der Kommandozeile (ausführen mit „cscript Skriptname.vbs“, nicht per Doppelklick!) Namen und letztes Anmeldedatum aller Computer aus. Aber Vorsicht: Dieses Skript fragt alle Domänencontroller nach dem letzten Anmeldedatum – in großen Umgebungen wird es also sehr lange brauchen und viel Last erzeugen!
http://faq-o-matic.net/?p=586