Ab Windows Vista und Windows Server 2008 hat Microsoft die Ereignisanzeige auf ein XML-basiertes System umgestellt. XPath-Abfragen ermöglichen präzises Filtern von Ereignissen.
XML-Struktur von Ereignissen
Jedes Ereignis wird als XML gespeichert:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Security-Auditing" />
<EventID>4624</EventID>
<Level>0</Level>
<TimeCreated SystemTime="2024-06-15T14:30:00.000Z" />
<Channel>Security</Channel>
<Computer>SERVER01.corp.example.com</Computer>
</System>
<EventData>
<Data Name="TargetUserName">jsmith</Data>
<Data Name="LogonType">3</Data>
</EventData>
</Event>
Grundlegende XPath-Abfragen
Nach Ereignis-ID filtern
*[System[(EventID=4624)]]
Mehrere Ereignis-IDs
*[System[(EventID=4624 or EventID=4625 or EventID=4634)]]
Nach Ereignisebene filtern
Ebenen: 1 (Kritisch), 2 (Fehler), 3 (Warnung), 4 (Information), 5 (Ausführlich)
*[System[(Level=2)]]
Nach Anbieter filtern
*[System[Provider[@Name='Microsoft-Windows-Security-Auditing']]]
Zeitbasierte Abfragen
Letzte 24 Stunden
*[System[TimeCreated[timediff(@SystemTime) <= 86400000]]]
Bestimmter Datumsbereich
*[System[TimeCreated[@SystemTime>='2024-01-01T00:00:00.000Z' and @SystemTime<='2024-01-31T23:59:59.999Z']]]
Abfragen in der Ereignisanzeige verwenden
Benutzerdefinierte Ansicht erstellen
- Ereignisanzeige öffnen (eventvwr.msc)
- Benutzerdefinierte Ansichten > Benutzerdefinierte Ansicht erstellen
- Registerkarte XML > Abfrage manuell bearbeiten aktivieren
- XPath-Abfrage eingeben:
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=4625)]]
</Select>
</Query>
</QueryList>
Befehlszeile mit wevtutil
:: Fehlgeschlagene Anmeldungen der letzten Stunde
wevtutil qe Security /q:"*[System[(EventID=4625) and TimeCreated[timediff(@SystemTime) <= 3600000]]]" /f:text /c:10
:: Fehler-Ereignisse als XML exportieren
wevtutil qe Application /q:"*[System[(Level=2)]]" /f:xml > errors.xml
PowerShell Get-WinEvent
XPath-Filter verwenden
# Fehlgeschlagene Anmeldungen
Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4625)]]" -MaxEvents 50
# Fehler der letzten 24 Stunden
Get-WinEvent -LogName Application -FilterXPath "*[System[(Level=2) and TimeCreated[timediff(@SystemTime) <= 86400000]]]"
FilterHashtable (einfachere Syntax)
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4625
StartTime = (Get-Date).AddDays(-1)
}
Nach CSV exportieren
Get-WinEvent -FilterXPath "*[System[(EventID=4624)]]" -LogName Security -MaxEvents 100 |
Select-Object TimeCreated, Id, Message |
Export-Csv "anmeldeereignisse.csv" -NoTypeInformation
Fortgeschrittene Abfragen
EventData-Felder abfragen
*[System[(EventID=4624)] and EventData[Data[@Name='LogonType']='3']]
Mehrere Bedingungen kombinieren
*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime) <= 86400000]] and EventData[Data[@Name='TargetUserName']='admin']]
Zusammenfassung
XPath-Abfragen bieten eine leistungsstarke Methode zum Filtern von Windows-Ereignisprotokollen. Für Automatisierung verwenden Sie Get-WinEvent in PowerShell mit denselben XPath-Abfragen oder der vereinfachten -FilterHashtable-Syntax. Erstellen Sie benutzerdefinierte Ansichten für häufig verwendete Abfragen.