Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Anzeigen der ersten Anmelde und letzten Abmeldezeit

Frage Microsoft Windows 7

Mitglied: killtec

killtec (Level 3) - Jetzt verbinden

13.10.2014 um 14:48 Uhr, 1397 Aufrufe, 12 Kommentare

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:
01.
<QueryList> 
02.
  <Query Id="0" Path="Security"> 
03.
    <Select Path="Security"> 
04.
      *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and ( Task = 
05.
12544 or Task = 12545 )]] 
06.
       and 
07.
      *[EventData[Data[@Name='TargetUsername'] and (Data='meinbenutzer')]] 
08.
    </Select> 
09.
  </Query> 
10.
</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ß
Mitglied: colinardo
13.10.2014, aktualisiert um 19:48 Uhr
Hallo killtec,
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):
01.
$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 
02.
$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 
03.
 
04.
write-host "Erste Anmeldung:"$firstLogon.TimeCreated 
05.
write-host "Letze Abmeldung:"$lastLogoff.TimeCreated 
06.
write-host "Die Differenz beträgt: "($lastLogoff - $firstLogon).toString("g")
BENUTZERNAME natürlich ersetzen.

Grüße Uwe
Bitte warten ..
Mitglied: killtec
14.10.2014 um 08:00 Uhr
Hi Uwe,
das funktioniert schon gut Danke schon mal. Wie kann ich denn einen Zeitraum angeben? Bsp. 06-10.10. Bzw. ein bestimmtes Datum? muss ich hier einfach das
01.
(get-date).Date}
durch das Datum ersetzen? Also
01.
13.10.2014}
Gruß
Bitte warten ..
Mitglied: colinardo
14.10.2014 um 08:07 Uhr
?{$_.TimeCreated -ge (get-date '06.10.2014') -and  $_.TimeCreated -le (get-date '10.10.2014')}
Grüße Uwe
Bitte warten ..
Mitglied: killtec
14.10.2014 um 08:30 Uhr
Uwe,
ist das korrekt dass die Ausgabe dieses Vefehles leer ist?:
01.
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 '06.10.2014')} | sort TimeCreated -Descending | select -First 1
Gruß
Bitte warten ..
Mitglied: colinardo
14.10.2014, aktualisiert um 09:09 Uhr
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
Bitte warten ..
Mitglied: killtec
14.10.2014 um 09:25 Uhr
Hi Uwe,
ok, das habe ich soweit verstanden
Jetzt bekomme ich jedoch folgende Ausgabe:
01.
PS C:\Windows\system32> $firstLogon = Get-WinEvent -LogName Security -FilterXPath "Event[System[Provider[@Name='Microsof 
02.
t-Windows-Security-Auditing'] and (Task = 12544)] and EventData[Data[@Name='TargetUsername'] = 'BENUTZERNAME' and Dat 
03.
a[@Name='LogonType'] and (Data=11 or Data=10 or Data=2)]]" | ?{$_.TimeCreated -ge (get-date '06.10.2014') -and  $_.TimeC 
04.
reated -le (get-date '10.10.2014')} | sort TimeCreated | select -First 1 
05.
PS C:\Windows\system32> $lastLogoff = Get-WinEvent -LogName Security -FilterXPath "Event[System[Provider[@Name='Microsof 
06.
t-Windows-Security-Auditing'] and (Task = 12545)] and EventData[Data[@Name='TargetUsername'] = 'BENUTZERNAME' and Dat 
07.
a[@Name='LogonType'] and (Data=11 or Data=10 or Data=2)]]" | ?{$_.TimeCreated -ge (get-date '06.10.2014') -and  $_.TimeC 
08.
reated -le (get-date '10.10.2014')} | sort TimeCreated -Descending | select -First 1 
09.
PS C:\Windows\system32> 
10.
PS C:\Windows\system32> write-host "Erste Anmeldung:"$firstLogon.TimeCreated 
11.
Erste Anmeldung: 06.10.2014 07:45:39 
12.
PS C:\Windows\system32> write-host "Letze Abmeldung:"$lastLogoff.TimeCreated 
13.
Letze Abmeldung: 
14.
PS C:\Windows\system32> write-host "Die Differenz beträgt: "($lastLogoff - $firstLogon).toString("g") 
15.
Der Vorgang "[$null] - [System.Diagnostics.Eventing.Reader.EventLogRecord]" ist nicht definiert. 
16.
Bei Zeile:1 Zeichen:51 
17.
+ write-host "Die Differenz beträgt: "($lastLogoff - <<<<  $firstLogon).toString("g") 
18.
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException 
19.
    + FullyQualifiedErrorId : NotAdefinedOperationForTypeType 
20.
 
21.
PS C:\Windows\system32>
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?

Danke.

Gruß
Bitte warten ..
Mitglied: colinardo
14.10.2014, aktualisiert um 09:31 Uhr
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
Da musst du dann eine IF-Abfrage davor setzen um zu prüfen ob die Variable einen Wert hat
01.
if ($lastLogoff -ne $null -and $firstLogon -ne $null){ 
02.
  write-host "Die Differenz beträgt:"($lastLogoff - $firstLogon).toString("g") 
03.
}
Bitte warten ..
Mitglied: killtec
14.10.2014 um 09:35 Uhr
Ok,
die Frage ist jedoch, Warum ist der zweite Wert leer obwohl da was stehen müsste?

Gruß
Bitte warten ..
Mitglied: colinardo
14.10.2014, aktualisiert um 09:41 Uhr
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 ...

Check auch mal ob deine Abmelde-Events die aufgeführten LogonType's bei dir besitzen ...
Bitte warten ..
Mitglied: killtec
14.10.2014, aktualisiert um 09:50 Uhr
Da muss ich dir recht geben
So, wenn ich das ganze in eine PS1-Datei packe, bleibt es leider trotzdem leer.

Habe das mal so in die PS eingegeben:
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)]]"

Da kommen Daten raus, aber das sieht ein bisschen komisch aus...
01.
TimeCreated 
02.
----------- 
03.
29.07.2014 10:50:41 
04.
29.07.2014 09:33:05 
05.
15.07.2014 13:35:49 
06.
15.07.2014 13:30:06 
07.
15.07.2014 11:22:03 
08.
15.07.2014 11:22:02 
09.
14.07.2014 11:45:20 
10.
14.07.2014 11:45:19 
11.
14.07.2014 10:00:08 
12.
14.07.2014 09:59:34 
13.
14.07.2014 09:59:26 
14.
03.07.2014 11:39:50 
15.
01.07.2014 11:13:37 
16.
26.06.2014 07:39:42 
17.
25.06.2014 11:45:50 
18.
19.05.2014 10:43:20 
19.
19.05.2014 10:31:16 
20.
28.04.2014 07:37:18 
21.
28.02.2014 12:47:08 
22.
26.01.2014 16:25:03 
23.
26.01.2014 12:07:20 
24.
26.01.2014 11:48:11 
25.
26.01.2014 11:39:36 
26.
18.12.2013 14:56:20 
27.
09.12.2013 07:31:30 
28.
02.10.2013 11:04:02 
29.
02.10.2013 11:01:56 
30.
17.09.2013 16:03:46 
31.
17.09.2013 13:38:37 
32.
17.09.2013 10:34:55 
33.
17.09.2013 10:14:43 
34.
17.09.2013 08:15:43 
35.
16.09.2013 16:59:42 
36.
16.09.2013 16:31:34 
37.
16.09.2013 14:19:29 
38.
16.09.2013 12:12:11 
39.
05.09.2013 15:41:16 
40.
05.09.2013 11:38:57
P.S.: Das ist die gesamte Liste...

Gruß
Bitte warten ..
Mitglied: novregen
10.04.2017 um 14:53 Uhr
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.
Bitte warten ..
Mitglied: colinardo
10.04.2017 um 15:25 Uhr
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:

https://www.administrator.de/frage/script-powershell-328713.html#comment ...

Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Webbrowser
Doc oder Docx in Webbrowser lesend anzeigen (2)

Frage von ChrisDynamite zum Thema Webbrowser ...

Exchange Server
Ersten Buchstaben einer Mail werden abgeschnitten (2)

Frage von Philipp.S zum Thema Exchange Server ...

Batch & Shell
gelöst Bat soll in einer .dll eine Zeile suchen und Diese + 2 darunterliegende anzeigen (10)

Frage von Gangster137910 zum Thema Batch & Shell ...

Windows Userverwaltung
Alle Freigaben eines Benutzers innerhalb einer Domäne anzeigen (5)

Frage von blade999 zum Thema Windows Userverwaltung ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Batch & Shell
Skripterstellung Lehrling (22)

Frage von 133119 zum Thema Batch & Shell ...

Windows Userverwaltung
gelöst Wie verfahrt Ihr mit den Windows-Benutzerkonten und -dateien von ausgeschiedenen Mitarbeitern? (14)

Frage von Bl0ckS1z3 zum Thema Windows Userverwaltung ...

Exchange Server
Microsoft Exchange Weiterleitung mit anderer primären E-Mail Adresse (14)

Frage von Rene12345 zum Thema Exchange Server ...

LAN, WAN, Wireless
Devolo DLAN 500 pro Wireless+ (13)

Frage von IceAge zum Thema LAN, WAN, Wireless ...