• Active Directory
    • AD Consulting
    • AD Design
      • Domain Name festlegen
      • Domain Struktur einrichten
      • Forest Struktur definieren
    • AD Management
    • AD Automation
      • Dynamic Access Control (DAC)
    • AD Federation Services
      • ADFS Betrieb
      • ADFS und Office365
      • ADFS und Cisco Unified Communications Manager
      • SAML und ADFS 2.0
  • Azure / M365
    • Azure AD
    • Microsoft 365 (O365)
  • Migration
    • Active Directory Migration
    • Exchange Migration
    • File Server Migration
    • Lotus Notes Migration
    • Novell Migration
  • Wissen
    • Alle Beiträge
    • Administration
    • PowerShell
    • Migration
    • Exchange
    • Tools
  • Kontakt
    • Wir über uns
    • Kontakt
  • EN
info@firstattribute.com
by FirstAttribute
Active Directory FAQActive Directory FAQ
  • Active Directory
    • AD Consulting
    • AD Design
      • Domain Name festlegen
      • Domain Struktur einrichten
      • Forest Struktur definieren
    • AD Management
    • AD Automation
      • Dynamic Access Control (DAC)
    • AD Federation Services
      • ADFS Betrieb
      • ADFS und Office365
      • ADFS und Cisco Unified Communications Manager
      • SAML und ADFS 2.0
  • Azure / M365
    • Azure AD
    • Microsoft 365 (O365)
  • Migration
    • Active Directory Migration
    • Exchange Migration
    • File Server Migration
    • Lotus Notes Migration
    • Novell Migration
  • Wissen
    • Alle Beiträge
    • Administration
    • PowerShell
    • Migration
    • Exchange
    • Tools
  • Kontakt
    • Wir über uns
    • Kontakt
  • EN

LastLogon vs. LastLogonTimestamp

Feb 3, 2022 (Letztes Update) | Posted by Susann Stenker Administration, PowerShell |

 

LastLogon vs. LastLogonTimestamp

Möchten Sie von einem Active Directory-Benutzer den Zeitpunkt der letzten Anmeldung auslesen, stellt sich die Frage, welches Attribut wir dafür brauchen: LastLogon oder LastLogonTimestamp.

Inhaltsverzeichnis

  • 1 Unterschied zwischen LastLogon und LastLogonTimestamp
    • 1.1 LastLogon für Benutzerverwaltung
  • 2 Werte der Attribute mit PowerShell auslesen
    • 2.1 Werte in Datumsformat umwandeln
    • 2.2 LastLogon: Verschiedene DCs abfragen
    • 2.3 LastLogon: Datumswerte verschiedener DCs vergleichen
    • 2.4 LastLogon und LastLogonTimeStamp formatieren
  • 3 Beispiel-Abfrage: 90 Tage nicht angemeldet
  • 4 Fazit

Unterschied zwischen LastLogon und LastLogonTimestamp

Erst einmal ist es wichtig, den Unterschied zwischen den Attributen zu kennen. Beide Attribute beinhalten den Zeitpunkt, an dem der Nutzer sich das letzte Mal angemeldet hat. Doch ist es nur das?

LastLogon gibt an, zu welchem Zeitpunkt sich ein Nutzer an einem bestimmten Domain Controller angemeldet hat.

LastLogonTimestamp gibt hingegen an, wann die letzte Anmeldung in der Domäne stattfand. LastLogonTimestamp wird auf alle Domain Controller im AD-Forest repliziert.

LastLogon hingegen wird nur auf dem bestimmten Domain Controller aktualisiert, auf dem die Anmeldung des Nutzers mit seinem Account stattgefunden hat. Hier findet keine Replikation auf die anderen Domain Controller statt. Das bedeutet, dass auf jedem Domain Controller das Attribut LastLogon für ein und denselben User-Account unterschiedlich ist.

Oder kurz:
Wir können zusammenfassend sagen, das LastLogonTimestamp die replizierte Version von LastLogon ist (unter Beachtung des Replikationszeitraumes). Falls sich ein Nutzer noch nie an einem Domain Controller angemeldet hat, ist der Wert der Attribute gleich Null.

PowerShell Skript im Hintergrund

LastLogon für Benutzerverwaltung

Mit dem FirstWare IDM-Portal werden LastLogon und LastLogonTimestamp Werte automatisch ausgelesen und in ein lesbares Format umwandelt. Sie können Basis für weitere automatisierte Aktionen sein. Das IDM-Portal vereinfacht die AD Benutzerverwaltung, so dass Mitarbeiter auch selbst Daten selbst pflegen.

Wichtig ist auch, dass die Replikation von LastLogonTimestamp nicht zeitnah erfolgt, sondern standardmäßig erst nach 14 Tagen (abzüglich eines zufälligen Wertes von 0 bis 5 Tage). Diese Einschränkung soll die die Netzwerkbandbreite, die durch die AD-Replikation belegt wird, so gering wie möglich halten.

Die Zeit, die die einzelnen Domain Controller verstreichen lassen, bevor der LastLogonTimestamp-Wert eines User-Objektes zu den anderen Domain Controllern repliziert wird, ist im Attribut msDS-LogonTimeSyncInterval festgelegt. Dieses findet man in den Eigenschaften des LDAP-Objektes der Domäne selbst und der Wert kann auch geändert werden. Ist der Wert nicht gesetzt, wird standardmäßig 9 bis 14 Tage festgelegt.

Die Values der Attribute LastLogon und LastLogonTimestamp sind im AD als numerische Werte (Large Integer) einer Länge von 8 Byte (64 Bit) hinterlegt.

Werte der Attribute mit PowerShell auslesen

Zunächst geht es darum, die Werte der Attribute LastLogon und LastLogonTimestamp für ein AD-Benutzerkonto auslesen zu können.

Bei LastLogonTimestamp funktioniert das ganz einfach über das Cmdlet „Get-ADUser“ (Import-Module ActiveDirectory), welcher die Identity (distinguishedName, objectGuid, objectSid oder samAccountName) entgegennimmt. Zudem wollen wir neben den Standard-Attributen auch das Attribut LastLogonTimestamp bei der Abfrage zurückerhalten:

$samAccountName = „maximilian.muster“

1
$user = Get-ADUser $samAccountName -Properties lastLogonTimestamp

Werte in Datumsformat umwandeln

Um den Integerwert in ein lesbares Datum umzuwandeln, nutzen wir die Methode DateTime.FromFileTime(Int64), welche die Windows-Dateizeit in eine entsprechende Ortszeit konvertiert.

1
$lastLogonTimestamp = [datetime]::fromFileTime($user.lastLogonTimestamp)

LastLogon: Verschiedene DCs abfragen

Um die letzte Anmeldung eines AD-Benutzer anhand des Attribute LastLogon herauszufinden, muss man sich die Werte aller Domain Controller heranziehen und das jüngste Datum auswählen. Wie schon erwähnt, sind auf jedem Domain Controller die Werte unterschiedlich, da keine Replikation für dieses Attribut stattfindet.

Zunächst suchen wir uns alle Namen der vorhandenen Domain Controller in der Domäne mit dem Cmdlet „Get-ADDomainController“:

1
$dcs = Get-ADDomainController -Filter * | Select-Object name

Nach der Initialisierung der Variablen für den samAccountName des Nutzers

1
$samAccountName = "maximilian.muster"

und der Zeit für LastLogon, welche uns den geringstmöglichen Wert zum Vergleich mit den anderen Datumswerten liefert,

1
$lastlogon=New-Object System.DateTime
LastLogon Wert in ein DateTime umwandeln

fragen wir von jedem Domain Controller das Attribut LastLogon ab und wandeln es in ein DateTime um:

1
2
3
4
5
6
7
8
9
foreach($dc in $dcs) {
try {
$user = Get-ADUser $samAccountName -Server $dc.name -Properties lastLogon
$lastlogonToCheck = [datetime]::fromFileTime($user.lastlogon)
}
catch {
continue
}
}

LastLogon: Datumswerte verschiedener DCs vergleichen

Damit wir den aktuellsten Wert von LastLogon aus allen Domain Controllern erhalten, müssen wir die Datumswerte miteinander vergleichen. Sollte das in der Variable $lastLogonToCheck gespeicherte Datum älter sein als das aktuelle Datum aus $lastLogon, so wird dieses als neues LastLogon-Datum gesetzt, bis wir zum Schluss das höchste und aktuellste Datum erhalten haben:

1
2
3
4
5
6
7
8
9
10
11
12
foreach($dc in $dcs) {
try {
$user = Get-ADUser $samAccountName -Server $dc.name -Properties lastLogon
$lastlogonToCheck = [datetime]::fromFileTime($user.lastlogon) if($lastlogon -lt $lastlogonToCheck) {
$lastlogon = $lastlogonToCheck
$lastLogonValue = $user.lastlogon
}
}
catch {
continue
}
}

LastLogon und LastLogonTimeStamp formatieren

Zum Schluss lassen sich die Werte von LastLogon und LastLogonTimestamp noch formatieren. Sollte der Wert noch unserem Initialen Wert entsprechen, heißt das, dass sich der Nutzer noch nie angemeldet hat. Ansonsten lässt sich das Datum in ein beliebiges Format ändern:

1
2
3
4
5
6
7
8
9
10
11
12
if($lastlogon -ne (New-Object System.DateTime) -And $lastlogon -ne [datetime]::fromFileTime(0)) {
$lastlogon = $lastlogon.ToString("dd.MM.yyyy HH:mm:ss")
}
else {
$lastlogon = "-"
}
if($lastLogonTimestamp -ne (New-Object System.DateTime) -And $lastLogonTimestamp -ne [datetime]::fromFileTime(0)) {
$lastLogonTimestamp = $lastLogonTimestamp.ToString("dd.MM.yyyy HH:mm:ss")
}
else {
$lastLogonTimestamp = "-"
}

Hier nun noch einmal das komplette Skript und die Konsolenausgabe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$dcs = Get-ADDomainController -Filter * | Select-Object name
$samAccountName = "maximilian.muster"
$lastlogon=New-Object System.DateTime
foreach($dc in $dcs) {
try {
$user = Get-ADUser $samAccountName -Server $dc.name -Properties lastLogon
$lastlogonToCheck = [datetime]::fromFileTime($user.lastlogon) if($lastlogon -lt $lastlogonToCheck) {
$lastlogon = $lastlogonToCheck
$lastLogonValue = $user.lastlogon
}
}
catch {
continue
}
}
$user = Get-ADUser $samAccountName -Properties lastLogonTimestamp
$lastLogonTimestamp = [datetime]::fromFileTime($user.lastLogonTimestamp)
$lastLogonTimestampValue = $user.lastLogonTimestamp
if($lastlogon -ne (New-Object System.DateTime) -And $lastlogon -ne [datetime]::fromFileTime(0)) {
$lastlogon = $lastlogon.ToString("dd.MM.yyyy HH:mm:ss")
}
else {
$lastlogon = "-"
}
if($lastLogonTimestamp -ne (New-Object System.DateTime) -And $lastLogonTimestamp -ne [datetime]::fromFileTime(0)) {
$lastLogonTimestamp = $lastLogonTimestamp.ToString("dd.MM.yyyy HH:mm:ss")
}
else {
$lastLogonTimestamp = "-"
}
Write-Host("`nLastLogon: ") -ForegroundColor Yellow
Write-Host("Wert: " + $lastlogonValue)
Write-Host("Datum: " + $lastlogon)
Write-Host("`nLastLogonTimestamp: ") -ForegroundColor Yellow
Write-Host("Wert: " + $lastlogonTimestampValue)
Write-Host("Datum: " + $lastLogonTimestamp)
LastLogOn Wert

Nachdem wir nun die einzelnen Werte aus dem AD auslesen können, zeigt das nachfolgende Beispiel einen Praxis-Anwendungsfall für diese Thematik.

Beispiel-Abfrage: 90 Tage nicht angemeldet

Der Wert lastLogonTimestamp ist es eher dazu geeignet, inaktive Konten ausfindig zu machen, die sich schon lange Zeit nicht mehr in der Domäne angemeldet haben. Mit folgendem PowerShell-Skript lassen sich alle Nutzer ausfindig machen, welche sich die letzten 90 Tage nicht angemeldet haben:

1
2
$now = Get-Date
$users = Get-ADUser -Filter * -Properties lastLogonTimestamp | Where {($now - [datetime]::FromFileTime($_.lastLogonTimestamp)).days -gt 90 }

Das CmdLet Search-ADAccount bietet ebenfalls diese Möglichkeit:

1
2
3
$now = Get-Date
$users = Search-ADAccount -AccountInactive -DateTime (($now).adddays(-90))
-UsersOnly

Hier können ein oder mehrere Benutzer-, Computer- oder Dienstkonten abgerufen werden, die den in den Parametern angegebenen Kriterien entsprechen. Zu den Suchkriterien gehören der Konto- und Passwortstatus. Um die Suche auf Benutzerkonten zu beschränken, kann der Parameter UsersOnly angegeben werden. Der Suchparameter AccountInactive gibt an, dass dieses CmdLet nach Konten sucht, die sich in einem bestimmten Zeitraum oder seit einem bestimmten Zeitpunkt nicht angemeldet haben. Mit DateTime kann ein bestimmtes Datum bzw. eine bestimmte Uhrzeit angegeben werden.

Fazit

Das Auslesen des Zeitpunktes der letzten Anmeldung eines Benutzers ist nicht schwer. Sie müssen nur wissen, welches Attribut Sie am besten dafür verwenden. Wo sich LastLogon vs. LastLogonTimestamp unterscheiden, können Sie im ersten Abschnitt nocheinmal nachlesen

Wenn Sie die Attribute für die Benutzerverwaltung verwenden wollen, lässt sich dies bequem mit dem IDM-Portal umsetzen auf den Bearbeitungsseiten von Benutzern und Computern umsetzen. Hier kann ein entsprechendes Skript integriert werden, welches lastLogon bzw. lastLogonTimestamp ausliest und in ein lesbares Format umwandelt. So sehen Sie bequem das Datum der letzten Anmeldung in einer Oberfläche.

Weiterführende Artikel:

PowerShell: Aktive Computerobjekte mit LastLogonTimeStamp finden
Schnelle LDAP-Suche mit PowerShell – 3 Varianten
LastLogonTimeStamp vs. msDSLastSuccessfulInteractiveLogonTime

Artikel weiterempfehlen:
  • teilen
  • tweeten
  • sharen
  • xingen
  • mailen
Artikel erstellt am: 20.01.2021
Tags: Exchange-OrdnerExchange-PostfachGet-MailboxLastLogonLastLogonTimeStampPowerShell
2

You also might be interested in

Microsoft Azure PowerShell

Verwalten von Azure Virtual Maschines mit PowerShell

Apr 2, 2015

Mit Microsoft Azure können schnell und einfach, virtuelle Maschinen mit[...]

PowerShell group policy cmdlets

Windows Powershell: Group Policy Cmdlets

Mrz 19, 2012

Der Windows Server 2008 R2, bzw. die Windows 7 Remote[...]

PowerShell

Powershell 2.0 New-PSDrive – Credential Parameter funktioniert nicht

Feb 4, 2015

Es gibt PowerShell Skripte, die eine temporäre Laufwerksverbindung aufbauen müssen.[...]

2 Comments

Leave your reply.
  • Thomas Wolfram
    · Antworten

    3. August 2021 at 9:11 PM

    Hallo,
    als Ergänzung:

    In Powershell liefert Get-ADUser zusätzlich auch ein berechnetes Property „LastLogonDate“ zurück was LastLoginTimestamp entspricht, aber bereits in DateTime konvertiert ist.

    Viele Grüße,
    Thomas Wolfram

Leave a Reply

<p>Danke für Ihre Anregungen, Fragen und Hinweise.<br/>Infos zum <a href="https://www.active-directory-faq.dekontakt/">Datenschutz</a></p>
Cancel Reply

FirstWare IDM-Portal im Test: IT-Administrator 08-2022

 

ADFAQ-FirstAttribute

Wer schreibt ?

Team der FirstAttribute AG

Consultants und Entwickler der FirstAttribute arbeiten seit mehr als 20 Jahren in IAM- und Cloud-Transition-Projekten.
Zusammen verfügen Sie über einen wertvollen Erfahrungsschatz im Bereich Active Directory und Azure AD und teilen diesen auf Active Directory FAQ.

Neueste Artikel

  • 8 Tipps für mehr Sicherheit in Active Directory und Backups von AD
  • Azure AD Custom Security Attributes ermöglichen flexible Berechtigungsstrukturen
  • Dateiberechtigungen in MS Teams und SharePoint Online verwalten – So funktioniert es
  • AD-Gruppen in Microsoft Teams verwenden – Dynamische Gruppen in der Praxis
  • Verbindung zwischen Microsoft 365 und SharePoint Online zu Azure AD

Unsere IAM-Lösungen

Ihre IAM-Lösung: FirstWare IDM-Portal

 

my-IAM für Cloud Identity Management in Microsoft Teams

Kontakt aufnehmen

Sie haben eine Frage oder Anmerkung? Schicken Sie uns schnell eine Nachricht.

Nachricht senden
Jetzt AD Tasks vereinfachen und delegieren: FirstWare IDM-Portal

Folgen Sie uns

Kontakt

  • FirstAttribute AG
  • Am Büchele 18, 86928 Hofstetten, Germany
  • +49 89 215 442 400
  • https://www.firstattribute.com

Schlagwörter

.Net ACL Active Directory AD LDS AD Objekt Azure AD Berechtigung Cloud cmdlets Delegation Domain Controller dynamicgroup dynamische Gruppen Exchange Exchange-Ordner Exchange-Postfach Exchange Migration Federation FirstWare Get-Mailbox Global Catalog Group Policy Gruppen Gruppenmitgliedschaft IDM-Portal LDAP m365 Microsoft Azure Migration New-ADUser Novell NTFS Office 365 PowerShell QMM QMM AD QMM Exchange Quest Migration Manager Schema Set-ADUser SID SID History Update Windows 10 Windows Server 2012 R2

Neueste Kommentare

  • activedirectoryfaq.com sharepoint login - infoslist bei Windows 365 und Azure AD verstehen in Theorie und Praxis
  • Domäne Letzte Anmeldung - ObenGesichert.com bei LastLogon vs. LastLogonTimestamp
  • Teams Code Zur Anmeldung - ObenGesichert.com bei Authentifizierung für MS Teams in hybriden Netzwerken
Login
Impressum
Datenschutzerklärung

© 2023 · Active-Directory-FAQ by firstattribute.com

Prev Next