Attribute für AD User : lastLogon
Das Active Directory Attribut lastLogon zeigt den exakten Zeitpunkt, an dem sich der Benutzer das letzte Mal erfolgreich am betreffenden Domänencontroller authentisiert hat. Es spielt dabei keine Rolle, auf welchem Weg die Anmeldung geschah - ob interaktiv, übers Netzwerk oder weitergeleitet von einem Radius-Server oder einem anderen Kerberos-Realm. Falls sich der Benutzer noch nie am DC angemeldet hat, ist der Wert von lastLogon gleich Null.
lastLogon
LDAP Name | lastLogon |
Datentyp | Integer8 (64 bit signed numeric) |
Multivalue (Array) | Nein |
System Flags | 0x11 |
Search Flags | 0x00 |
Im Global Catalog? | Nein |
Attribute ID | 1.2.840.113556.1.4.52 |
AD DB Attributname | Last-Logon |
ADSI datatype | 10 - LargeInteger |
LDAP syntax | 1.2.840.113556.1.4.906 - Microsoft Large Integer |
Wird verwendet in ... | > W2K |
Schema Doku | Microsoft - MSDN |
Bitte beachten Sie, dass das lastLogon Attribut NICHT zwischen Domänencontrollern repliziert wird - wenn man die genaue Anmeldezeit eines Benutzers in einer Domäen mit mehreren Domänencontrollern herausfinden will, muß man diesen Wert deshalb von allen Domänencontrollern abfragen! Mit Windows 2003 Active Directory wurde von Microsoft das Attribut lastLogonTimestamp eingeführt. Dieses Attribut wird zu anderen DCs repliziert, aber erst nach zwei Wochen (minus einem zufälligen Zeitraum in der Spanne bis 5%), also ist es dafür geeignet, inaktive Konten ausfindig zu machen, die sich schon lange Zeit nicht mehr in der Domäne angemeldet haben.
Der lastLogon Wert ist ein Microsoft Large Integer, es handelt sich hier um numerische Werte von 8 Byte (64 bit) Länge - aus diesem Grund werden sie oft auch Integer8 Werte genannt:
Minimum value: -9223372036854775808 (-2^63) or hex 0x8000000000000000 |
Maximum value: 9223372036854775807 (2^63 - 1) orhex 0x7FFFFFFFFFFFFFFF |
Es gibt einen anderen Artikel im SelfADSI Tutorial über Microsoft Integer8 Werte, die Datum/Zeit-Stempel oder Zeitintervalle repräsentieren.
Der Wert, der in einem lastLogon Attribut gespeichert ist, repräsentiert ein Datum und ein Uhrzeit, ausgedrückt in 100-Nanosekunden-Schritten seit dem 1. Januar 1600, 0:00 Uhr.
Nebenbei erwähnt wird diese Spezifikation auch in der Microsoft FileTime Struktur verwendet. Zusätzlich dazu sollte man wissen, dass alle Datums- und Zeitangaben in der Active Directory Datenbank intern im UTC Zeitformat gespeichert werden (Universal Coordinated Time) - das ist (fast) das gleiche wie die frühere Greenwich Meantime (GMT). Wenn Sie also ein System in der mitteleuropäische Zeitzone zur Sommerzeit betreiben (MEZ, das ist GMT + 2), so müssen Sie die Integer8 Attributwerte entsprechend umrechnen, wenn Sie sie in lokaler Zeit sehen wollen.
Wenn Sie nun das lastLogon Attribut eines bestimmten Benutzers lesen wollen, so müssen Sie zuerst mit dem zurückgegebenen Large Integer Wert umgehen können, der aus zwei Teilwerten besteht: Dem HighPart und dem LowPart. Diese Teilwerte sind durch das ADSI Interface für diesen Datentyp zugreifbar. Aber: Sie müssen beim Auslesen eines Large Integer/Integer8 Attributes in einm ADSI Script unbedingt mit einem vorangehenden 'Set' ein Objekt erzeugen. Ansonsten kann man auf die entsprechenden ADSI Interface-Eigenschaften 'HighPart' und 'LowPart' nicht zugreifen.
Umwandlung eins lastLogon Wertes in eine lesbare Datum- und Zeitangabe
Hier kommt also ein Script, indem ein Integer8 Wert in ein Datum plus Uhrzeit umgewandelt werden kann, inklusive der Anpassung an die lokale Zeitzone (die Abweichung von UTC ermitteln wir aus der Registry):
Alle Benutzer suchen, die sich in der letzten Woche an einem DC angemeldet haben
Und hier ein weiteres Script, indem wir umgekehrt die Umwandlung eines Datums/Zeit-Wertes in den entsprechenden Integer8-Wert meistern müssen - wir wollen alle Benutzer finden, die sich an einem bestimmten Domänencontroller in der letzten Woche angemeldet haben. Um den korrekten LDAP Filter zu bauen, brauchen wir den Large Integer Wert für das Datum/die Uhrzeit von vor einer Woche... Wenn Sie nicht genau wissen, wie die Suchfunktion dieses Scripts arbeitet: Es gibt einen detaillierten Artikel hier im SelfADSI Tutorial, indem die LDAP Suche mit ADO Techniken erklärt wird.