Nach einer erfolgreich abgeschlossenen Active Directory Migration kommt früher oder später der Moment, wo es darum geht die alte Domain abzuschalten.
Hier stellt sich die Frage nach noch aktiven Computern in der alten Domain.
Ein kleines PowerShell-Skript hilft dabei noch aktive Computerobjekte finden.
Index
LastLogonTimeStamp
Wenn wir aktive Computerobjekte finden wollen, bietet sich das Attribut LastLogonTimeStamp an. Es wird von Computern automatisch aktualisiert, wenn der Wert, welcher im Computer Objekt der Domain gespeichert ist, älter als 9-14 Tage ist. Möchte man den LastLogonTimeStamp jedoch in einem LDAP-Filter verwenden, werden wir etwas Seltsames feststellen. Der Wert gibt an, dass die Anzahl von Nanosekunden seit dem 01.01.1601 mit 100 an. Mit einem kleinen Trick ist es aber dennoch möglich, LastLogonTimeStamp in einem LDAP Filter zu verwenden.
DateTime::FromFileTime
Mit der Methode ::FromFileTime der Klasse [DateTime] lässt sich der LastLogonTimeStamp (Nanosekunden seit dem 01.01.1601 / 100 ) in ein Datumsformat umwandeln.
1 |
$lastlogon=[datetime]::FromFileTime($comp.lastlogontimestamp) |
LDAP-Filter
Damit wir den LastLogonTimeStamp in einem LDAP Filter abfragen können, müssen wir zunächst den abzufragenden Zeitstempel ausrechnen. In diesem Beispiel fragen wir alle Computerobjekte ab, welche sich in den vergangenen 6 Monaten (~182 Tage) angemeldet haben.
1 2 |
$DaysInactive = 182 $LDAPcheckdate=(Get-Date).Adddays(-($DaysInactive)).ToFileTime() |
Mit der Methode “.ToFileTime()” wird das Datum in das gleiche Format umgewandelt, wie es der LastLogonTimeStamp benutzt. Dieser Wert kann nun in einem LDAP Filter verwendet werden. Damit es als Parameter für z.B. Find-LdapObject verwendet werden kann, setze ich den Filter zunächst als Variable $LDAPQuery zusammen.
1 2 |
$ldapQuery = '(&(objectClass=computer)(lastLogonTimeStamp=' + $LDAPcheckdate + '))' $ActiveComp=Find-LdapObject -SearchFilter:$ldapquery |
Fazit
Der Vorteil dieser Vorgehensweise ist die besonders schnelle Abfrage. In meinem aktuellen Fall befinden sich ca. 16.000 Computerobjekte in der Domain.
Wenn ich alle Computer per LDAP anfrage und danach den LastLogonTimeStamp auswerte, dauert die Abfrage ca. 10 Minuten.
Berechne ich jedoch den LastLogonTimeStamp zuerst und nutze diesen Wert bereits in der LDAP Anfrage, so verringert sich die Laufzeit auf wenige Sekunden.
Der Grund liegt darin, dass nur noch 30 aktive Computer zurückgeliefert werden.
weiterführende Artikel:
Schnelle LDAP-Suche mit PowerShell – 3 Varianten
LastLogonTimeStamp vs. msDSLastSuccessfulInteractiveLogonTime
Dieser Artikel entstand bei Projekten der FirstAttribute AG
AD Consulting | AD Migration
Sie planen Veränderungen an Ihrem AD?
Nehmen Sie Kontakt zu uns auf, wir hören Ihnen gern zu.
1 Comment
Leave your reply.