Ereignisse mit der PowerShell auslesen

Ausgaben der Windows Ereignisanzeige mit der Windows PowerShell auslesen!

Grundlagen

Mit der Ereignisanzeige erhält man Zugriff auf die aufgezeichneten Ereignisinformationen. Neben den Windows Protokollen sind auch die Anwendungs- und Dienstprotokolle sichtbar. Mit Abonnements kann man sich Ereignisse von anderen Server auf einen zentralen Server weiterleiten lassen. Die Ereignisanzeige bietet auch die Möglichkeit, das beim Eintreffen eines bestimmten Events ein Programm gestartet wird, eine Meldung angezeigt wird oder eine Email versendet wird. Detailliert Informationen zu der Ereignisanzeige und dessen Ausgaben findet Ihr in diesem Artikel.

Die Windows Ereignisanzeige
Die Windows 10 Ereignisanzeige

Zum Artikel: Windows 10 Fehlermeldungen finden

Zugriff mit der Powershell

Mit dem PowerShell Cmdlet Get-Eventlog kann man nun direkt auf die Ereignisanzeige zugreifen. Dieses Cmdlet benötigt natürlich noch das Protokoll, auf welches es zugreifen soll. Zur Auswahl stehen hier natürlich sämtliche Protokolle wie z.B. System, Andwendung, Installation etc..

PS C:UsersMarkus> Get-Eventlog
Cmdlet Get-EventLog an der Befehlspipelineposition 1
Geben Sie Werte für die folgenden Parameter an:
LogName:

Nach diesem Aufruf möchte die PowerShell eben eine Protokoll, von welchem es sämtliche Einträge auslesen soll. Die Liste kann allerdings sehr lang und unübersichtlich sein. Besser wäre es, wenn man das ganze etwas sortiert. Man könnte sich z.B. nur die letzten 20 ausgeben lassen. Hierzu verwendet man das Argument newest mit dem Parameter 20.

Get-EventLog System -Newest 20

   Index Time          EntryType   Source                 InstanceID Message                                                                          
   ----- ----          ---------   ------                 ---------- -------                                                                          
   84783 Aug 02 09:38  Information Service Control M...   1073748860 Dienst "Diagnosesystemhost" befindet sich jetzt im Status "Beendet".             
   84782 Aug 02 09:32  Information Service Control M...   1073748860 Dienst "WinHTTP-Web Proxy Auto-Discovery-Dienst" befindet sich jetzt im Status...
   84781 Aug 02 09:29  Information Service Control M...   1073748860 Dienst "Tablet PC-Eingabedienst" befindet sich jetzt im Status "Ausgeführt".     
   84780 Aug 02 09:24  Information Service Control M...   1073748860 Dienst "Enumeratordienst für tragbare Geräte" befindet sich jetzt im Status "B...
   84779 Aug 02 09:23  Information Service Control M...   1073748860 Dienst "Anwendungsinformationen" befindet sich jetzt im Status "Ausgeführt".     
   84778 Aug 02 09:22  Information Service Control M...   1073748860 Dienst "Anwendungserfahrung" befindet sich jetzt im Status "Ausgeführt".         
   84777 Aug 02 09:20  Information Service Control M...   1073748860 Dienst "Anwendungserfahrung" befindet sich jetzt im Status "Beendet".            
   84776 Aug 02 09:11  Information Service Control M...   1073748860 Dienst "Unterstützung in der Systemsteuerung unter Lösungen für Probleme" befi.
.
.

Powershell Ausgabe Filtern

Aber auch diese Ausgabe ist noch etwas sehr unübersichtlich. Vor allem werden die Ereignisse nicht nach deren Ereignistyp kategorisiert. (Ereignistypen wären z.B. Fehler, Warnung, Information etc.) Sinnvoller ist es, die Ereignisse eines bestimmten Typs aufzurufen. Hierzu benötigt man zunächst das Cmdlet where-Object. Anschließend werden die Ergebnisse nach deren EntryType durchsucht.  Unter EntryType versteht man eigentlich nix anderes als den Typ des Ereignissen ( z.B. Error, Information..) Mittels der Abfrage nach einem Fehler (Error) kann man sich nun die Ergebnisse ausgeben lassen. Ein Vergleich auf Stringbasis (also Text) erfolgt mit -match. Die Befehle werden natürlich wieder mit der Pipe | verbunden. Weiter Informationen zur Pipeline findet ihr im folgendem Artikel:

Zum Artikel: Powershell Pipeline richtig verwenden

PS C:UsersMarkus> Get-EventLog System -Newest 2000  | Where-Object {$_.EntryType -match "Error"}

   Index Time          EntryType   Source                 InstanceID Message                                                                          
   ----- ----          ---------   ------                 ---------- -------                                                                          
   84961 Aug 03 09:07  Error       DCOM                   3221235488 Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefund...
   84791 Aug 02 09:55  Error       Schannel                    36887 Es wurde eine schwerwiegende Warnung empfangen: 40.                              
   84790 Aug 02 09:55  Error       Schannel                    36887 Es wurde eine schwerwiegende Warnung empfangen: 112.                             
   84748 Aug 02 08:59  Error       DCOM                   3221235488 Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefund...
   84497 Aug 01 16:16  Error       DCOM                   3221235488 Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefund...
   84305 Jul 31 13:10  Error       bowser                 3221233475 Der Hauptsuchdienst erhielt eine Serverankündigung vom Computer "ZENBOOK",...    
   84213 Jul 31 07:43  Error       DCOM                   3221235488 Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefund...
   84057 Jul 30 21:51  Error       bowser                 3221233475 Der Hauptsuchdienst erhielt eine Serverankündigung vom Computer "ZENBOOK",...    
   84052 Jul 30 20:14  Error       bowser                 3221233475 Der Hauptsuchdienst erhielt eine Serverankündigung vom Computer "ZENBOOK",...    
   83938 Jul 30 11:58  Error       DCOM                   3221235488 Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefund...
   83733 Jul 29 08:06  Error       DCOM                   3221235488 Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefund...
   83359 Jul 28 07:22  Error       DCOM                   3221235488 Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefund...
   83107 Jul 27 08:29  Error       DCOM                   3221235488 Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefund...

Eine schönere und detaillierte Ausgabe erhält man, wenn man die Ergebnisse noch mit Format-List in eine übersichtlichere Form bringt.

PS C:UsersMarkus> Get-EventLog System -Newest 2000  | Where-Object {$_.EntryType -match "Error"} | Format-List


Index              : 84961
EntryType          : Error
InstanceId         : 3221235488
Message            : Die Beschreibung für Ereignis-ID -1073731808 in Quelle DCOM wurde nicht gefunden. Der lokale Computer hat möglicherweise nicht 
                     die notwendigen Registrierungsinformationen oder Meldungs-DLL-Dateien, um die Meldung anzuzeigen, oder Sie sind nicht 
                     berechtigt, darauf zuzugreifen. Die folgenden Informationen sind Teil des Ereignisses:'Anwendungsspezifisch', 'Lokal', 'Start', 
                     '{C97FCC79-E628-407D-AE68-A06AD6D8B4D1}', '{344ED43D-D086-4961-86A6-1106F4ACAD9B}', 'NT-AUTORITÄT', 'SYSTEM', 'S-1-5-18', 
                     'LocalHost (unter Verwendung von LRPC)'
Category           : (0)
CategoryNumber     : 0
ReplacementStrings : {Anwendungsspezifisch, Lokal, Start, {C97FCC79-E628-407D-AE68-A06AD6D8B4D1}...}
Source             : DCOM
TimeGenerated      : 03.08.2014 09:07:25
TimeWritten        : 03.08.2014 09:07:25
UserName           : NT-AUTORITÄTSYSTEM

Ereignisse speichern

Es bietet sich hier natürlich auch noch die Möglichkeit an, die Einträge separat in ein Textdatei zu speichern. Dies ist z.B. sinnvoll, wenn man die Ereignisse sammeln möchte um ggf. später nochmal darauf zugreifen zu können. Der obige Befehl wird einfach erweitert, indem man nach einer erneuten Weiterleitung – also eine Pipe – das Cmdlet Out-File mit einem Speicherort und natürlichen einen Namen der Datei angibt. Man sollte aber unbedingt beachten, dass man an den angegeben Speicherort auch die entsprechenden Recht hat, um eine Datei anlegen zu können.

PS C:UsersMarkus> Get-EventLog System -Newest 2000  | Where-Object {$_.EntryType -match "Error"} | Format-List | Out-File c:Errorlog.txt

Fazit

Das Auslesen der Ereignisse auf einem Windows Client wie Windows 10 oder einem Server System wie z.B Server 2012R2 ist eine absolute Notwendigkeit für jeden IT-Systemadministrator. Die Zukunft der Konsole liegt wohl in der Windows Powershell, so dass man sich damit auf jedem Fall mal beschäftigen sollte. Viele Information zu dieser Thematik habe ich aus diesem Buch zur: Windows PowerShell  *.