Verwenden des Cmdlet \"Get-Eventlog\"

Verwalten von Ereignisprotokollen und Ereignissen in Ereignisprotokollen

Das Cmdlet Get-EventLog erfüllt eigentlich zwei Aufgaben: Es ermöglicht Ihnen, Ihre Ereignisprotokolle zu verwalten, und außerdem, auf die in diesen Ereignisprotokollen enthaltenen Ereignisse zuzugreifen.

Angenommen, Sie brauchen ein paar grundlegende Informationen über die Ereignisprotokolle auf Ihrem Computer. In diesem Fall verwenden Sie beim Aufruf von Get-EventLog den Parameter –list:

Get-EventLog -list

Damit erhalten Sie etwa die folgenden Informationen zurück:

Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----
  15,168      0 OverwriteAsNeeded       5,279 Application
     512      7 OverwriteOlder            145 Credential Manager
     512      7 OverwriteOlder             12 MNP Toc Editor
  15,360      0 OverwriteAsNeeded          88 MonadLog
  15,360      0 OverwriteAsNeeded         324 PowerShell
  30,016      0 OverwriteAsNeeded      51,510 Security
  15,168      0 OverwriteAsNeeded       6,457 System

Falls Sie nur Informationen über ein spezielles Ereignisprotokoll benötigen, verwenden Sie das Cmdlet Where-Object: Mit diesem Cmdlet wird die Datenabfrage auf das Protokoll beschränkt, dessen LogDisplayName beispielsweise gleich "System" ist:

Get-EventLog -list | Where-Object {$_.logdisplayname -eq "System"}

Wie Sie sehen, erhalten Sie damit nur Informationen über das Ereignisprotokoll "System" zurück:

Max(K) Retain OverflowAction        Entries Name
  ------ ------ --------------        ------- ----
  15,168      0 OverwriteAsNeeded       6,458 System

Das ist aber erst der Anfang. Wie wir bereits erwähnt haben, können Sie Get-EventLog auch verwenden, um die Ereignisse in Ihrem Ereignisprotokoll einzusehen. Der folgende Befehl beispielsweise fragt alle Ereignisse im Ereignisprotokoll "System" ab:

Get-EventLog system

Als Ergebnis erhalten Sie (abhängig von der Anzahl der Datensätze in Ihrem Ereignisprotokoll) eine lange Liste, die etwa wie folgt aussieht und in der Sie blättern können:

Windows PowerShell

Sind das mehr Informationen, als Sie eigentlich wollten oder benötigten? In diesem Fall verwenden Sie den Parameter –newest. Damit erhalten Sie nur die letzten x in dem Protokoll aufgezeichneten Ereignisse zurück. Der folgende Befehl beispielsweise fragt die letzten drei Ereignisse ab, die in das Ereignisprotokoll "System" geschrieben wurden:

Get-EventLog system -newest 3

Sie erhalten etwa die folgenden Daten zurück:

Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
 5811 May 13 09:42  Erro W32Time                    29 The time provider Ntp...
 5810 May 13 09:42  Warn W32Time                    14 The time provider Ntp...
 5809 May 13 09:13  Warn DnsApi                  11194 The system failed to ...

Um detailliertere Informationen zu erhalten, leiten Sie die zurückgegebenen Daten einfach zum Cmdlet Format-List weiter:

Get-EventLog system -newest 3 | Format-List

Damit erhalten Sie Informationen wie die folgenden:

Index              : 5811
EntryType          : Error
EventID            : 29
Message            : The time provider NtpClient is configured to acquire time from one or more
                     time sources, however none of the sources are currently accessible.
                     No attempt to contact a source will be made for 59 minutes.
                     NtpClient has no source of accurate time.
Category           : (0)
CategoryNumber     : 0
ReplacementStrings : {59}
Source             : W32Time
TimeGenerated      : 5/13/2006 9:42:22 AM
TimeWritten        : 5/13/2006 9:42:22 AM

Sie können auch Daten zum Cmdlet Where-Object weiterleiten, um eine Untermenge an Ereignissen zu erhalten. Der folgende Befehl beispielsweise fragt nur die Ereignisse aus dem Ereignisprotokoll von Windows PowerShell ab, deren EventID gleich 403 ist:

Get-EventLog Windows PowerShell | Where-Object {$_.EventID -eq 403}

Wie Sie vielleicht erwartet haben, erhalten wir nur Ereignisse mit der EventID 403 zurück:

Index Time          Type Source                EventID Message
----- ----          ---- ------                ------- -------
   58 May 12 09:09  Info Windows PowerShell                403 Engine state is chang...
   34 May 10 15:39  Info Windows PowerShell                403 Engine state is chang...
   16 May 09 15:28  Info Windows PowerShell                403 Engine state is chang...

Und hier folgt ein kleiner praktischer Befehl, der alle Ereignisse im Ereignisprotokoll von Windows PowerShell abfragt und diese Ereignisse dann mit Hilfe des Cmdlet Group-Object nach ihrer EventID gruppiert. Mit anderen Worten, der Befehl sammelt alle Ereignisse für jede ID (z. B. sind zwei Ereignisse mit EventID 300 aufgetreten, sechs Ereignisse mit EventID 400 usw.). Diese Daten werden dann an das Cmdlet Sort-Object weitergereicht, um die Ergebnisse nach EventID sortiert anzuzeigen. Und hier der Befehl:

Get-EventLog Windows PowerShell | Group-Object eventid | Sort-Object Name

Und hier die Ergebnisse nach Ausführung dieses Befehls:

Count Name                      Group
----- ----                      -----
    2 300                       {TVSFRANK, TVSFRANK}
    6 400                       {TVSFRANK, TVSFRANK, TVSFRANK, TVSFRANK...}
    3 403                       {TVSFRANK, TVSFRANK, TVSFRANK}
   42 600                       {TVSFRANK, TVSFRANK, TVSFRANK, TVSFRANK...}
   21 601                       {TVSFRANK, TVSFRANK, TVSFRANK, TVSFRANK...}