Jeder Windows-Systemadministrator ist wahrscheinlich mit dem Windows-Ereignisprotokoll vertraut. Die Verwendung dieses Cmdlets in PowerShell ermöglicht es Systemadministratoren, viele Ereignisse auf einmal über mehrere Computer hinweg zu analysieren. Es befreit die Systemadministratoren davon, in der Ereignisanzeige herumzuklicken, um den richtigen Filter zu finden und zu bestimmen, wo genau dieses kritische Ereignis gespeichert ist. Allerdings hat Get-EventLog
seine Nachteile, wie Sie sehen werden.
Auflisten von Ereignisprotokollen mit Get-EventLog
Das Cmdlet Get-EventLog
ist in allen modernen Versionen von Windows PowerShell verfügbar. Bei seiner einfachsten Verwendung benötigt dieses Cmdlet ein Ereignisprotokoll, das abgefragt werden soll, und es werden dann alle Ereignisse in diesem Ereignisprotokoll angezeigt.
Aber was ist, wenn Sie den Namen des Ereignisprotokolls nicht kennen? In diesem Fall müssen wir alle verfügbaren Ereignisprotokolle auf unserem lokalen Computer herausfinden. Das tun wir, indem wir den Befehl Get-EventLog -List
verwenden.

Sie können sehen, dass ich jetzt ein paar Ereignisprotokolle auf meinem lokalen System habe, aber Sie fragen sich vielleicht, wo die anderen sind? Es gibt dutzende andere Ereignisprotokolle, die unter „Anwendungen und Dienste-Protokolle“ in der Ereignisanzeige angezeigt werden. Warum sind sie hier nicht?
Falls Sie diese Ereignisse benötigen, funktioniert Get-EventLog
leider nicht. Stattdessen müssen Sie sich Get-WinEvent ansehen. Das Cmdlet Get-EventLog
könnte als veraltetes Cmdlet betrachtet werden, aber ich verwende es immer noch häufig, einfach weil es so einfach zu bedienen ist.
Abfragen von Ereignissen mit Get-EventLog
Nun, da wir alle verfügbaren Ereignisprotokolle kennen, können wir nun Ereignisse innerhalb dieses Ereignisprotokolls lesen. Vielleicht möchte ich alle Ereignisse im Anwendungsereignisprotokoll sehen. Um diese Ereignisse zu erhalten, muss ich den LogName
-Parameter mit Get-EventLog
angeben und das Cmdlet wird durch das Zurückgeben aller Ereignisse in diesem Ereignisprotokoll nachkommen.

Standardmäßig sehen Sie nur sechs Eigenschaften in der Ausgabe:
Index
Time
EntryType
Source
InstanceId
Message
Tatsächlich gibt Get-EventLog
16 von ihnen zurück. Der Grund, warum Sie nur sechs sehen, liegt an den PowerShell-Formatierungsregeln, die die Ausgabe definieren. Unten finden Sie ein Beispiel für die tatsächliche Ausgabe, die durch das Umleiten von Get-EventLog
zu Select-Object
und Auswahl aller Eigenschaften gefunden wurde.

Filtern mit Get-EventLog
Es besteht die Wahrscheinlichkeit, dass wir beim Suchen nach Ereignissen nicht alle Ereignisse benötigen. Stattdessen benötigen wir nur wenige. In diesem Fall müssen wir nach bestimmten Ereignissen filtern. Get-EventLog
bietet verschiedene Möglichkeiten, dies zu tun. Das Cmdlet kann nach Zeitstempel, Eintragstyp, Ereignis-ID, Nachricht, Quelle und Benutzername filtern. Dies deckt die meisten Möglichkeiten zur Suche nach Ereignissen ab.
Um Filterung zu demonstrieren, frage ich vielleicht regelmäßig nach Ereignissen und möchte die zehn neuesten finden. In diesem Fall kann ich den Newest
-Parameter verwenden und angeben, wie viele Ereignisse ich sehen möchte. Get-EventLog -LogName Application -Newest 10
gibt nur die letzten zehn Ereignisse zurück.
Vielleicht möchte ich alle Ereignisse nach einem bestimmten Zeitpunkt finden. Dafür haben wir den After
-Parameter. Der After
-Parameter nimmt ein Datum/Uhrzeit an, also wenn ich nur die Ereignisse im Anwendungsprotokoll finden möchte, die nach dem 26.01.19 10:17 Uhr stattgefunden haben, könnte ich dies tun Get-EventLog -LogName Application -After '26.01.19 10:17'
. Wir könnten auch denselben Prozess durchführen, aber Ereignisse auswählen, die vor einem bestimmten Datum passiert sind, mit, Sie haben es vielleicht erraten, dem Before
-Parameter.
Das Get-EventLog
hat viele verschiedene Möglichkeiten, zu filtern, die nicht auf einem Zeitstempel basieren. Wir können Ereignisse auch basierend auf anderen Attributen wie der Ereignis-ID (Instanz-ID) und der Meldung filtern, die oft übliche Attribute zum Suchen sind. Vielleicht weiß ich, dass ich nach einem Ereignis mit der ID 916 suche; wir übergeben 916 dem InstanceId
-Parameter.
Wir können auch Filter kombinieren. Vielleicht erhalte ich viele Ereignisse mit einer ID von 916 zurück, aber ich möchte jene Ereignisse mit dem String svchost in der Meldung. In diesem Fall können wir den Message
-Parameter zu Get-EventLog
hinzufügen und einen Platzhalter wie svchost angeben.
Bonus Skript!
Brauchen Sie ein großartiges Beispiel für die Verwendung von Get-EventLog in einem realen Skript? Wenn ja, haben Sie Glück! Unten finden Sie einen fortgeschrittenen Anwendungsfall von \verb|Get-EventLog|, den Sie heute herunterladen und verwenden können!
Zusammenfassung
Der Get-EventLog
-Befehl ist ein großartiger Befehl, wenn Sie sich jemals in der Situation befinden, schnell eine der gängigen Ereignisprotokolle abfragen zu müssen. Er ist einfach zu verwenden und bietet einige grundlegende Filtermöglichkeiten. Wenn Sie jedoch eine gründliche Untersuchung der Ereignisprotokolle durchführen müssen, wird wahrscheinlich der Befehl Get-WinEvent
besser funktionieren, aber er ist etwas schwieriger zu verwenden und erfordert manchmal das Kennen von Syntax wie XPath.