Last Logon Datum per Powershell abrufen
Moin Kollegen.
Wer ist vor 10 schon so fit, mir Folgendes zu erklären:
Das zum Titel passende Skript ist schnell gefunden:
Auf meinem PC funktioniert das auch. Auf anderen PCs liefert es jedoch "testnutzer last logged on at: 1/1/1601 1:00:00 AM" und das verstehe ich nicht.
Ich habe schon verstanden, wie das Skript arbeitet und auch, wieso es theoretisch 1601 ausspuckt. Aber warum sollte es dies auf einigen PCs tun und auf anderen korrekt arbeiten?
Selbst wenn ich in Zeile 5 den Filter so ändere, dass immer DC1 genommen wird (auf DC 1 hat sich Testnutzer heute angemeldet), kommt dennoch 1601 raus.
Wer ist vor 10 schon so fit, mir Folgendes zu erklären:
Das zum Titel passende Skript ist schnell gefunden:
Import-Module ActiveDirectory
function Get-ADUserLastLogon([string]$userName)
{
$dcs = Get-ADDomainController -Filter {Name -like "*"}
$time = 0
foreach($dc in $dcs)
{
$hostname = $dc.HostName
$user = Get-ADUser $userName | Get-ADObject -Properties lastLogon
if($user.LastLogon -gt $time)
{
$time = $user.LastLogon
}
}
$dt = [DateTime]::FromFileTime($time)
Write-Host $username "last logged on at:" $dt }
Get-ADUserLastLogon -UserName testnutzer
Ich habe schon verstanden, wie das Skript arbeitet und auch, wieso es theoretisch 1601 ausspuckt. Aber warum sollte es dies auf einigen PCs tun und auf anderen korrekt arbeiten?
Selbst wenn ich in Zeile 5 den Filter so ändere, dass immer DC1 genommen wird (auf DC 1 hat sich Testnutzer heute angemeldet), kommt dennoch 1601 raus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 517518
Url: https://administrator.de/forum/last-logon-datum-per-powershell-abrufen-517518.html
Ausgedruckt am: 08.04.2025 um 21:04 Uhr
12 Kommentare
Neuester Kommentar
Ist doch eigentlich eine Steilvorlage für @colinardo den Shell Wizzard ! 
Moin,
ich erinnere mich dunkel daran, dass LastLogon nicht immer korrekte Werte liefert.
Ich suche das mal raus.
Edit habs gefunden:
https://blogs.technet.microsoft.com/askds/2009/04/15/the-lastlogontimest ...
Die Info könnte aber veraltet sein.
Gruss
ich erinnere mich dunkel daran, dass LastLogon nicht immer korrekte Werte liefert.
Ich suche das mal raus.
Edit habs gefunden:
https://blogs.technet.microsoft.com/askds/2009/04/15/the-lastlogontimest ...
Die Info könnte aber veraltet sein.
Gruss
ungetestet - auf dem Handy zusammen getickert
Edit: CP-Fehler
Import-Module ActiveDirectory
function Get-ADUserLastLogon([string]$userName) {
$dcs = Get-ADDomainController -Filter { Name -like "*" }
$time = Get-Date(0)
foreach ($dc in $dcs) {
$hostname = $dc.HostName
$user = Get-ADUser -Filter {Name -eq $username} -server $hostname -Properties LastLogonDate
if ($user.LastLogonDate -gt $time) {
$time = $user.LastLogon
}
}
Write-Host $username "last logged on at:" $Time.Date
}
Get-ADUserLastLogon -UserName testnutzer
Edit: CP-Fehler
Ist zwar schon kurz vor 10 aber gefühlt noch halb 8.
https://social.technet.microsoft.com/Forums/office/de-DE/1ae08081-dcfe-4 ...
Der Kollege meint, dass lastlogon nicht repliziert wird.
Ich rate mal ins blaue und sage, dass der PC auf dem du das Script aufrufst nur den DC fragt, bei dem er selber angemeldet ist unabhängig davon welchen welchen DC du im Skript definierst.
Kannst ja mal die Theorie prüfen wenn du schaust ob alle PCs auf denen es funktioniert am selben DC angemeldet sind.
https://social.technet.microsoft.com/Forums/office/de-DE/1ae08081-dcfe-4 ...
Der Kollege meint, dass lastlogon nicht repliziert wird.
Ich rate mal ins blaue und sage, dass der PC auf dem du das Script aufrufst nur den DC fragt, bei dem er selber angemeldet ist unabhängig davon welchen welchen DC du im Skript definierst.
Kannst ja mal die Theorie prüfen wenn du schaust ob alle PCs auf denen es funktioniert am selben DC angemeldet sind.
Der Ansatz von @Kraemer ist der richtige!
LastLogon wird nicht repliziert. Man muss jeden DC der betreffenden Domäne abfragen und das jüngste Datum gilt dann. Immer nur jener DC, über welchen die letzte Anmeldung erfolgt ist, hat den aktuellen Zeitstempel.
Hinweis:
Das ist nicht das letzte interaktive Logon! Es ist der Zeitstempel, wann der Benutzer zuletzt seine Anmeldedaten bestätigt hat.
Bsp:
E.
siehe auch hier https://activedirectoryfaq.com/2014/02/msds-lastsuccessfulinteractivelog ...
und die dort genannten Links
LastLogon wird nicht repliziert. Man muss jeden DC der betreffenden Domäne abfragen und das jüngste Datum gilt dann. Immer nur jener DC, über welchen die letzte Anmeldung erfolgt ist, hat den aktuellen Zeitstempel.
Hinweis:
Das ist nicht das letzte interaktive Logon! Es ist der Zeitstempel, wann der Benutzer zuletzt seine Anmeldedaten bestätigt hat.
Bsp:
- 8:00 Uhr interaktive Anmeldung am PC --> DC1 speichert Zeitstempel 8:00
- 8:10 Uhr erster Zugriff auf Freigabe auf Fileserver FS1 --> FS1 erstellt neue Sitzung für diesen Benutzer, fragt dafür bei DC2 nach --> DC2 speichert Zeitstempel 8:10
- 8:20 Uhr erster Zugriff auf Drucker auf Printserver PS1 --> PS1 erstellt neue Sitzung für diesen Benutzer, fragt dafür bei DC3 nach --> DC3 speichert Zeitstempel 8:20
E.
siehe auch hier https://activedirectoryfaq.com/2014/02/msds-lastsuccessfulinteractivelog ...
und die dort genannten Links

Zitat von @DerWoWusste:
Moin.
Nein, deine Schleife über alle DCs wird bei deinem Skript gar nicht genutzt, $hostname kommt bei keiner Abfrage zum Einsatz 😉.Moin.
LastLogon wird nicht repliziert
Das ist mir klar. Das Skript, was ich nehme fragt doch alle DCs und nimmt den neuesten Eintrag, oder nicht?Zitat von @DerWoWusste:
Das ist mir klar. Das Skript, was ich nehme fragt doch alle DCs und nimmt den neuesten Eintrag, oder nicht?
Nein. Du verwendest $hostname nicht.Das ist mir klar. Das Skript, was ich nehme fragt doch alle DCs und nimmt den neuesten Eintrag, oder nicht?
So:
$user = Get-ADUser $userName | Get-ADObject -Properties lastLogon -Server $hostname
sogar doppelt - ich hatte deinen Code entsprechend angepasst