Windows verfügt über mehrere verschiedene Ereignisprotokolle, aber wie können Sie sie schnell abrufen? Das Get-WinEvent
-Cmdlet kann klassische Windows-Ereignisprotokolle wie die System- und Anwendungsprotokolle, Protokolle, die von der Windows-Ereignisprotokolltechnologie generiert wurden, und sogar Ereignisverfolgungsprotokolle für Windows (ETW) abrufen!
In diesem Artikel erfahren Sie, wie Sie Get-WinEvent
nutzen können, um Ereignisse aus Ereignisprotokollen abzurufen und zu filtern!
Voraussetzungen
Um mitzumachen, benötigen Sie nur eine aktuelle Version von Windows 10 und PowerShell 5.1 und höher. Dieser Artikel verwendet Windows 10 und PowerShell 7.1.
Auflisten verfügbarer Protokolle mit Get-WinEvent
Es ist schwierig zu wissen, welche Protokolleinträge Sie möglicherweise benötigen, ohne alle verfügbaren Protokolle zu kennen. Mit Get-WinEvent
können Sie alle verfügbaren Protokolle schnell mithilfe des Parameters -ListLog
auflisten. Der Parameterwert *
teilt Get-WinEvent
mit, alle Protokolle ohne Filterung aufzulisten. Wie unten gezeigt, werden alle Protokolle abgerufen, aber nur eine begrenzte Anzahl von Eigenschaften wird mithilfe des Select-Object
-Cmdlets angezeigt.
Nicht alle Protokolle sind standardmäßig aktiviert. Sie müssen möglicherweise den Ereignisbetrachter öffnen, das Protokoll suchen und mit der rechten Maustaste darauf klicken, um das Protokoll zu aktivieren, bevor Ereignisse angezeigt werden.

Alle Protokolle nach Windows Vista werden als
*.evtx
-Dateien gespeichert anstelle des älteren*.evt
-Formats. Die EigenschaftIsClassicLog
gibt an, ob die Ereignisse im Protokoll in einem Nachrichtendatei im Format*.mc
oder in einem Manifest im Format*.xml
definiert sind.
Eine interessante Eigenschaft ist das LogMode
, das Sie vielleicht bemerkt haben, normalerweise auf Circular
gesetzt ist.
Circular
– Überschreibt den ältesten Protokolleintrag, wenn voll.Retain
– Behält alle Ereignisse, bis das Protokoll voll ist, und stoppt das Protokollieren, bis Speicher freigegeben ist.AutoBackup
– Sichert und archiviert Ereignisprotokolle automatisch, wenn sie voll sind.

Zuletzt, bei der Betrachtung der LogType
-Eigenschaft gibt es verschiedene Arten von Protokollen. Diese Eigenschaft dient mehr zur Kategorisierung, informiert jedoch typischerweise darüber, wie das Protokoll verwendet wird und welche Arten von Ereignissen angezeigt werden.
- Administrativ – In erster Linie für Endbenutzer und Administratoren bestimmt.
- Analytisch – Typischerweise ein Protokoll mit hoher Auslastung, das dazu dient, Programmbetrieb zu beschreiben.
- Debuggen – Gedacht für Entwickler, die tief in die internen Abläufe des Programms eintauchen müssen.
- Operativ – Ein Ereignis, das während des Betriebs auftritt und nützlich ist, um Vorkommnisse zu diagnostizieren und Prozesse auszulösen.

Auflisten von Ereignisprotokollanbietern
Jetzt, da Sie ein solides Verständnis für die verschiedenen Protokolle und ihre Eigenschaften haben, hilft es zu verstehen, was ein Ereignisprotokollanbieter ist. Ein Anbieter ist in der Terminologie des Ereignisprotokolls eine Quelle eines Ereignisses.
Ereignisprotokollanbieter sind einzigartig und mit jedem Protokoll verknüpft, wie z. B. Anwendungs- oder Systemprotokolle, und dienen als benannte Quelle, von der ein Ereignis stammt.
Vielleicht möchten Sie Probleme beim Filtern von Protokollen finden und sind nur an Problemen eines bestimmten Anbieters interessiert. Verwenden Sie den Parameter -ListProvider
, um alle verfügbaren Anbieter anzuzeigen. Wie unten gezeigt, listet das *
alle verfügbaren Anbieter und die Protokolle auf, mit denen die Anbieter verknüpft sind, wie z. B. Windows PowerShell oder System.

Vielleicht möchten Sie nur Anbieter auflisten, die für ein bestimmtes Protokoll verfügbar sind, wie z.B. System
. Um dies zu tun, könnten Sie Ereignisse mithilfe des Where-Object
-Befehls filtern und die Werte der LogLinks
-Eigenschaft verwenden. Die LogLinks
-Eigenschaft zeigt die verknüpften Ereignisprotokolle als Liste an.
Um die angeforderten Protokolle mit Where-Object
zu filtern, verwenden Sie den -In
-Vergleichsoperator, um nur Ereignisse mit System
im Wert der LogLinks
-Eigenschaft zu filtern. Schließlich erleichtert die Verwendung von Format-Table -AutoSize
das Lesen der Ausgabe, wie unten gezeigt.

Abrufen von klassischen Ereignisprotokollen mit Get-WinEvent
Der erste Schritt bei der Fehlerbehebung eines Windows-Problems besteht darin, entweder das Anwendungs- oder das Systemprotokoll abzurufen, was klassische Ereignisprotokolle sind. Im unten gezeigten Beispiel werden die ersten 100
Ereignisse mithilfe des Parameters -MaxEvents
des Anwendungsereignisprotokolls abgerufen.
Um das Lesen der Ergebnisse zu erleichtern, wählen Sie nur die benötigten Eigenschaften aus, um die Einträge einfacher lesen zu können. Andernfalls werden die Einträge nach dem Anbieternamen gruppiert, was das Parsen der Ergebnisliste erschwert.

Die Suche nach modernen Windows-Ereignissen mit Get-WinEvent
Nachdem Sie Ereignisse aus dem klassischen Anwendungsprotokoll abgerufen haben, wie sieht es mit Ergebnissen aus einem neueren Windows-Ereignisprotokoll aus, wie zum Beispiel Microsoft-Windows-WindowsUpdateClient/Operational
?
Im Gegensatz zu einem klassischen Ereignisprotokoll wie System
handelt es sich bei Microsoft-Windows-WindowsUpdateClient/Operational
um ein modernes Protokoll, bei dem Get-WinEvent
genauso funktioniert wie unten beschrieben.

Was ist mit dem Abrufen nur der ältesten Ereignisse? Obwohl Sie die Ergebnisse mit Sort-Object
umkehren könnten, verwenden Sie den Parameter -Oldest
, um die ersten 10
Ereignisse abzurufen, wie unten gezeigt.
Der Befehl Get-WinEvent
filtert für Sie anstelle aller Ergebnisse und Sortierungen, was normalerweise langsamer ist.

Abrufen von Ereignisverfolgungsdateien für Windows (ETW) mit Get-WinEvent
Vielleicht haben Sie eine exportierte *.evtx
-Datei von einem anderen Computer oder ein vorhandenes Protokoll gesichert. Sie können diese Protokolle mit dem Cmdlet Get-WinEvent
lesen. Wenn Sie Protokolle aus Audit-Gründen aufbewahren müssen, ist Get-WinEvent
eine großartige Möglichkeit, diese Protokolle schnell mit Standard-Cmdlets in Skripten abzufragen.
Um das Abrufen von Protokolleinträgen aus einer *.evtx
-Datei zu demonstrieren, benötigen Sie eine exportierte Protokolldatei.
1. Öffnen Sie den Ereignisanzeige und navigieren Sie zu einem Protokoll. In diesem Beispiel das Protokoll Anwendungs- und Dienstprotokolle → Windows PowerShell.

2. Klicken Sie dann auf den Menüpunkt Alle Ereignisse speichern unter… im Aktionen-Bereich.

3. Speichern Sie die Datei an einem Speicherort auf der Festplatte, um sie mit dem Befehl Get-WinEvent
abzurufen.

Jetzt, da Sie eine Protokolldatei exportiert haben, geben Sie den Dateispeicherort über den Parameter -Path
an, um die Ereignisse zu lesen. Im unten gezeigten Beispiel wird das Windows PowerShell-Protokoll exportiert, um es später zu verwenden.

Filtern von Windows-Ereignisprotokollen mit Get-WinEvent
Auch wenn Sie Protokolle mit dem Standard-Where-Object
-Cmdlet filtern könnten, bietet Get-WinEvent
integrierte Filter. Indem Sie alle Ergebnisse zurückgeben und dann filtern, wird mehr Arbeit geleistet, als notwendig ist. Stattdessen sollten Sie immer versuchen, so viel wie möglich bereits an der Quelle zu filtern.
Das Get-WinEvent
-Cmdlet bietet drei Parameter, um Ihnen bei der Filterung durch Tausende von Ereignissen zu helfen, genannt -FilterHashTable
, -FilterXPath
und -FilterXML
. Jeder Parameter erledigt im Allgemeinen die gleiche Aufgabe, jedoch auf eine andere Weise.
Filtern von Ereignisprotokollen mit FilterHashTable
Der Parameter -FilterHashTable
filtert Inhalte basierend auf den übereinstimmenden Eigenschaften, wie z.B. LogName
. Anstatt den Parameter -LogName
zu verwenden, um nach einem bestimmten Protokoll zu filtern, können Sie stattdessen eine Hashtabelle verwenden, wie z.B. @{'LogName' = 'Anwendung'}
, die der Ereigniseigenschaft LogName
entspricht.
Das unten gezeigte Beispiel stellt eine Hashtabelle für den Parameter -FilterHashTable
bereit, die nur nach dem Anwendungsprotokoll sucht und mit einer Startzeit, die alle Ereignisse nach Mitternacht des aktuellen Tages umfasst, liefert Get-WinEvent
schnell Ergebnisse.

FilterHashTable
parameter.Vergleichen Sie die Filtergeschwindigkeiten des oben genannten Befehls mit einem, der über Where-Object
anstelle des Parameters -FilterHashTable
in der Pipeline gefiltert wird. Wie Sie sehen können, ist der Befehl, der Where-Object
verwendet, viel langsamer als derjenige, der den Parameter -FilterHashTable
verwendet.

FilterHashTable
and Where-Object
.Filtern von Ereignisprotokollen mit dem Parameter FilterXPath
Ereignisprotokolleinträge werden als XML-Dateien gespeichert, und daher können Sie die XPath-Sprache, eine XML-Abfragesprache, verwenden, um durch die Protokolleinträge zu filtern. Durchführen des oben verwendeten gleichen Befehls und Übersetzen in XPath können Sie die gleichen Ergebnisse erzielen.
Um eine XPath-Abfrage zu erstellen, verwenden Sie die Filterfunktion im Windows-Ereignisprotokoll, wie unten gezeigt.
1. Öffnen Sie den Ereignisanzeige und navigieren Sie zu einem Protokoll, wie z.B. dem Windows-Protokolle → Anwendung Protokoll.

2. Klicken Sie anschließend auf den Link Filter Current Log im rechten Bereich.

3. Geben Sie die Parameter ein, die Sie zum Filtern des Protokolls verwenden möchten.

4. Klicken Sie auf die XML-Schaltfläche und kopieren Sie den Abschnitt, der innerhalb des Select-Tags enthalten ist.

5. Kopieren und fügen Sie nun den kopierten Inhalt mit dem -FilterXPath
-Parameter ein. Sie können jetzt unten sehen, dass Sie mithilfe der XPath-Syntax aus dem Ereignisprotokoll-Viewer eine Abfrage erstellen können, um nur die erforderlichen Informationen zu filtern.

FilterXPath
parameter.Das Eintauchen in die Erstellung von XPath-Abfragen fällt nicht in den Rahmen dieses Artikels, aber das grundlegende Format wird unten gezeigt. Wenn der FilterXPath
-Parameter ein Datum filtert, sehen Sie einen großen Unterschied: Sie müssen ein spezifischeres Datumsformat verwenden, yyyy-MM-ddTHH:mm:ss.fffZ
, das Datum muss in UTC zurückgegeben werden, was durch den -AsUTC
-Schalter angegeben ist.

Filtern von Ereignisprotokollergebnissen mit FilterXML
Zuletzt ist der letzte verfügbare Filterparameter der -FilterXML
-Parameter. Im Gegensatz zu den -FilterXPath
– und -FilterHashTable
-Parametern nimmt dieser Parameter XML an, das dann zum Filtern der Ereignisse verwendet wird. Der -FilterXML
-Parameter ermöglicht komplexere Regeln und kann wie unten gezeigt die früheren Filterbeispiele replizieren.
Wie im vorherigen Beispiel gezeigt, können Sie eine vorformatierte Abfrage aus der Ereignisanzeige → Aktuelles Protokoll filtern-Fähigkeit abrufen. Anstatt nur den Inhalt im Select
-Knoten auszuwählen, verwenden Sie die gesamte Abfrage. Es wurden keine tatsächlichen Filter ausgewählt, wie durch das *
im Select
-Knoten angegeben. Dies liefert die allgemeine Markup für das nächste Beispiel.

Statt einen Einzeiligen Befehl zu erstellen, trennen Sie zunächst die XML-Abfrage und weisen Sie das Markup einer Variablen $Query
im folgenden Beispiel zu. Das Zuweisen der Abfrage an eine Variable erleichtert die Verwendung und Lesbarkeit. Übergeben Sie anschließend die Variable $Query
an den -FilterXML
-Parameter von Get-WinEvent
.
Wie unten gezeigt, sehen Sie die Ergebnisse der komplexeren Abfrage, die alle Ereignisse dieses Tages zurückgibt und im Anwendungs
-Protokoll gespeichert ist.

FilterXML
works.Zusammenfassung
Das Cmdlet Get-WinEvent
erleichtert das Abfragen mehrerer Ereignisprotokollquellen mit leistungsstarken Filterfunktionen. Vom Auditieren bis zur Problembehebung ist das Cmdlet Get-WinEvent
eine wichtige Ergänzung für jeden Systemadministrator!