Anzeigen der ersten Anmelde und letzten Abmeldezeit
Hallo zusammen,
ich würde gerne aus meinem System die erste Anmeldezeit und die letzte Abmeldezeit aus dem Eventlog filtern.
Versucht habe ich bisher dies:
Aber das scheint nicht ganz das zu sein, was ich suche. Ich will also nur die Ereignisse filtern. Wo ein Benutzer sich aktiv (per Keyboard) An oder Abgemeldet hat.
OS: Windows 7 Pro
Gruß
ich würde gerne aus meinem System die erste Anmeldezeit und die letzte Abmeldezeit aus dem Eventlog filtern.
Versucht habe ich bisher dies:
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and ( Task =
12544 or Task = 12545 )]]
and
*[EventData[Data[@Name='TargetUsername'] and (Data='meinbenutzer')]]
</Select>
</Query>
</QueryList>
Aber das scheint nicht ganz das zu sein, was ich suche. Ich will also nur die Ereignisse filtern. Wo ein Benutzer sich aktiv (per Keyboard) An oder Abgemeldet hat.
OS: Windows 7 Pro
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 251777
Url: https://administrator.de/contentid/251777
Ausgedruckt am: 21.11.2024 um 23:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo killtec,
Beispiel für die erste Anmeldung des Tages und der letzten Abmeldung (Powershell):
BENUTZERNAME natürlich ersetzen.
Grüße Uwe
ich würde gerne aus meinem System die erste Anmeldezeit und die letzte Abmeldezeit aus dem Eventlog filtern.
was meinst du mit erster Anmeldezeit? Die erste Anmeldung des heutigen Tages ?Beispiel für die erste Anmeldung des Tages und der letzten Abmeldung (Powershell):
$firstLogon = Get-WinEvent -LogName Security -FilterXPath "Event[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and (Task = 12544)] and EventData[Data[@Name='TargetUsername'] = 'BENUTZERNAME' and Data[@Name='LogonType'] and (Data=11 or Data=10 or Data=2)]]" | ?{$_.TimeCreated -ge (get-date).Date} | sort TimeCreated | select -First 1
$lastLogoff = Get-WinEvent -LogName Security -FilterXPath "Event[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and (Task = 12545)] and EventData[Data[@Name='TargetUsername'] = 'BENUTZERNAME' and Data[@Name='LogonType'] and (Data=11 or Data=10 or Data=2)]]" | ?{$_.TimeCreated -ge (get-date).Date} | sort TimeCreated -Descending | select -First 1
write-host "Erste Anmeldung:"$firstLogon.TimeCreated
write-host "Letze Abmeldung:"$lastLogoff.TimeCreated
write-host "Die Differenz beträgt: "($lastLogoff - $firstLogon).toString("g")
Grüße Uwe
Also ich erkläre das mal genauer.
Get-WinEvent filtert erst mal das komplette Eventlog nach deinen Kriterien. Danach enthält es alle gewünschten Events, jedoch noch aus dem kompletten Zeitraum des Eventlog .d.h soweit dies zurückreicht. Dies muss nun auf einen Datumsbereich eingeschränkt werden. Dazu benötigen wir zwei Zeitangaben, die Anfangszeit und die Endzeit. In deinem geposteten Code sind also alle Events vom 06.10.2014 00:00 Uhr bis jetzt enthalten, weil du die Endzeit nicht einschränkst.
Auch zu erwähnen ist, das der Fall eintreten kann das du dich an einem Tag überhaupt nicht an- oder abgemeldet hast weil z.B. der Rechner über Nacht durchgelaufen ist. Deswegen kann es durchaus sein das eins oder beide Daten leer sein können, je nachdem welchen Zeitraum du filterst. Ebenso kann es sein das sich ein Rechner zwei Tage im Hibernate befindet, dann sind natürlich für diesen Zeitraum ebenfalls keine Daten vorhanden.
Grüße Uwe
Get-WinEvent filtert erst mal das komplette Eventlog nach deinen Kriterien. Danach enthält es alle gewünschten Events, jedoch noch aus dem kompletten Zeitraum des Eventlog .d.h soweit dies zurückreicht. Dies muss nun auf einen Datumsbereich eingeschränkt werden. Dazu benötigen wir zwei Zeitangaben, die Anfangszeit und die Endzeit. In deinem geposteten Code sind also alle Events vom 06.10.2014 00:00 Uhr bis jetzt enthalten, weil du die Endzeit nicht einschränkst.
Auch zu erwähnen ist, das der Fall eintreten kann das du dich an einem Tag überhaupt nicht an- oder abgemeldet hast weil z.B. der Rechner über Nacht durchgelaufen ist. Deswegen kann es durchaus sein das eins oder beide Daten leer sein können, je nachdem welchen Zeitraum du filterst. Ebenso kann es sein das sich ein Rechner zwei Tage im Hibernate befindet, dann sind natürlich für diesen Zeitraum ebenfalls keine Daten vorhanden.
Grüße Uwe
Zitat von @killtec:
P.S.: Habe natürlich den Benutzernamen durch meinen ersetzt gehabt.
Die Meldung, dass die Differenz nicht errechnet werden kann liegt vermutlich daran, dass die zweite Variable leer ist.
Da ich den PC abends abschalte, weiß ich. dass dort eigentlich etwas stehen sollte. Hast du hier noch eine Idee?
Das ist ja klar, die Differenz habe ich nur als einfaches Beispiel ohne Fehlerprüfung mit eingefügt, ohne einen Wert kann ja auch nix berechnet werden P.S.: Habe natürlich den Benutzernamen durch meinen ersetzt gehabt.
Die Meldung, dass die Differenz nicht errechnet werden kann liegt vermutlich daran, dass die zweite Variable leer ist.
Da ich den PC abends abschalte, weiß ich. dass dort eigentlich etwas stehen sollte. Hast du hier noch eine Idee?
Da musst du dann eine IF-Abfrage davor setzen um zu prüfen ob die Variable einen Wert hat
if ($lastLogoff -ne $null -and $firstLogon -ne $null){
write-host "Die Differenz beträgt:"($lastLogoff - $firstLogon).toString("g")
}
Zitat von @killtec:
die Frage ist jedoch, Warum ist der zweite Wert leer obwohl da was stehen müsste?
Erstens kenne ich die Einträge in deinem Eventlog nicht, und zweitens ist dein hier geposteter Code in mehrere Zeilen gesplittet in der Konsole eingeben worden, so kann es nicht laufen. Pack das ganze in eine PS1-Datei und führe diese dann aus ...die Frage ist jedoch, Warum ist der zweite Wert leer obwohl da was stehen müsste?
Check auch mal ob deine Abmelde-Events die aufgeführten LogonType's bei dir besitzen ...
Zitat von @novregen:
Hallo, das ganze würde mich auch interessieren. Wenn es ein domain Benutzername ist, müßte die Abfrage dann auf dem DomainController erfolgen ? Habe dort einmal probiert, es werden jedoch keine Ereignisse mit dem Filter gefunden.
Das ist nur für lokale Anmeldungen gedacht, für Domainanmeldungen siehe:Hallo, das ganze würde mich auch interessieren. Wenn es ein domain Benutzername ist, müßte die Abfrage dann auf dem DomainController erfolgen ? Habe dort einmal probiert, es werden jedoch keine Ereignisse mit dem Filter gefunden.
An- und Abmelde Ereignisse mit Powershell auslesen
Grüße Uwe