Wie kann ich in PowerShell Ereignisprotokolle auslesen und filtern?
- Ereignisprotokolle mit PowerShell auslesen
- Grundlegendes Auslesen eines Protokolls mit Get-EventLog
- Einfache Filterung mit Get-EventLog
- Arbeiten mit dem moderneren Get-WinEvent
- Filterung mit Filterhash-Tabellen
- Filtern mit XML-Abfragen
- Visualisierung und Ausgabeformat
- Zusammenfassung
Ereignisprotokolle mit PowerShell auslesen
In PowerShell gibt es verschiedene Cmdlets, um Ereignisprotokolle von Windows auszulesen. Das wichtigste und am häufigsten verwendete Cmdlet ist Get-EventLog, das hauptsächlich für klassische Windows-Ereignisprotokolle wie Application, System oder Security genutzt wird. Seit Windows Vista bzw. Windows Server 2008 ist das Event-Log-System auf ein neues Event-Logging basierend auf dem XML-Format umgestellt worden. Um mit diesen neueren Logs umzugehen, sollte man das Cmdlet Get-WinEvent verwenden, das flexibler und leistungsstärker ist.
Grundlegendes Auslesen eines Protokolls mit Get-EventLog
Um beispielsweise die letzten 100 Einträge aus dem Systemprotokoll auszulesen, nutzt man:
Get-EventLog -LogName System -Newest 100Dieses Cmdlet liest die neuesten 100 Einträge aus dem System-Log aus und gibt sie tabellarisch aus. Standardmäßig enthält die Ausgabe Informationen wie Datum, Quelle, Ereignis-ID, Ebene und Nachricht.
Einfache Filterung mit Get-EventLog
Man kann die Ausgabe nach bestimmten Kriterien filtern. Zum Beispiel, um nur die Ereignisse mit einer bestimmten Ereignis-ID zu erhalten, nutzt man:
Get-EventLog -LogName Application -EntryType Error -After (Get-Date).AddDays(-7)Dieses Beispiel zeigt alle Fehler (EntryType Error) im Anwendungsprotokoll, die in den letzten sieben Tagen aufgetreten sind.
Arbeiten mit dem moderneren Get-WinEvent
Get-WinEvent ist das leistungsfähigere Cmdlet zum Auslesen von Ereignisprotokollen, da es sowohl klassische Logs als auch die neuen Eventlog-Formate unterstützt. Zudem kann man sehr komplexe Filter auf Basis von XML-Abfragen oder Filterhash-Tabellen verwenden.
Ein einfaches Beispiel, das die letzten 50 Ereignisse aus dem Sicherheitsprotokoll ausgibt, sieht so aus:
Get-WinEvent -LogName Security -MaxEvents 50Filterung mit Filterhash-Tabellen
Ein mächtiges Feature von Get-WinEvent ist die Verwendung von sogenannten Filterhash-Tabellen. Damit lassen sich sehr spezifische Abfragen formulieren, um Events nach mehreren Kriterien zu filtern.
Beispielsweise können Sie alle Fehlerereignisse aus dem Systemlog der letzten 24 Stunden abfragen:
$filter = @{ LogName = System Level = 2 # Level 2 bedeutet Fehler StartTime = (Get-Date).AddDays(-1)}Get-WinEvent -FilterHashtable $filterIn diesem Beispiel bedeutet Level = 2 Fehler, 1 wäre kritisch, 3 für Warnungen etc. Der Parameter StartTime sorgt dafür, dass nur Events ab diesem Zeitpunkt zurückgegeben werden.
Filtern mit XML-Abfragen
Für sehr komplexe Szenarien lässt sich mit Get-WinEvent auch ein eigener XML-Filter erstellen, der auf XPath basiert. Dies ist beispielsweise sinnvoll, wenn man nach mehreren Bedingungen kombiniert filtern möchte.
Hier ein Beispiel, das alle Warnungen oder Fehler aus dem Systemprotokoll abfragt, die eine bestimmte Ereignis-ID besitzen:
$query = @" * ] "@Get-WinEvent -FilterXml $queryDie XML-Abfrage erlaubt sehr exakte Filter auf Eigenschaften eines Events wie Level, EventID, Quelle, Zeitstempel und mehr.
Visualisierung und Ausgabeformat
PowerShell gibt die Ergebnisse von Get-EventLog und Get-WinEvent standardmäßig als Objekte aus, die sich sehr gut weiterverarbeiten lassen. So können Sie mit Format-Table oder Format-List die Ausgabe übersichtlicher gestalten:
Get-WinEvent -LogName Application -MaxEvents 10 | Format-ListOder man filtert und zeigt nur bestimmte Eigenschaften an, zum Beispiel Datum, Quelle und Nachricht:
Get-WinEvent -LogName System -MaxEvents 20 | Select-Object TimeCreated, ProviderName, Id, LevelDisplayName, MessageZusammenfassung
Um Ereignisprotokolle in PowerShell auszulesen und zu filtern, sollte man zunächst entscheiden, ob man klassische Logs (Get-EventLog) oder moderne Events (Get-WinEvent) nutzen möchte. Get-WinEvent ist flexibler und bietet umfangreiche Filtermöglichkeiten via Filterhash-Tabellen oder XML-Abfragen. So lassen sich gezielt Events analysieren, die bestimmten Kriterien entsprechen, wie z.B. Fehler, bestimmte Ereignis-IDs oder Zeiträume. Die Ausgabe kann bequem mit Select-Object oder Format-* Cmdlets angepasst werden, um einen schnellen Überblick zu erhalten oder die Daten für weitere Verarbeitungsschritte vorzubereiten.
