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

  1. Ereignisanzeige öffnen (eventvwr.msc)
  2. Benutzerdefinierte Ansichten > Benutzerdefinierte Ansicht erstellen
  3. Registerkarte XML > Abfrage manuell bearbeiten aktivieren
  4. 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.