Freigeben über


Get-WinEvent

Ruft Ereignisse aus Ereignisprotokollen und Ereignisablaufverfolgungsprotokolldateien auf lokalen und Remotecomputern ab.

Syntax

Get-WinEvent
   [[-LogName] <String[]>]
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-ListLog] <String[]>
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-Force]
   [<CommonParameters>]
Get-WinEvent
   [-ListProvider] <String[]>
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [<CommonParameters>]
Get-WinEvent
   [-ProviderName] <String[]>
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-Path] <String[]>
   [-MaxEvents <Int64>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterHashtable] <Hashtable[]>
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXml] <XmlDocument>
   [-Oldest]
   [<CommonParameters>]

Beschreibung

Dieses Cmdlet ist nur auf der Windows-Plattform verfügbar.

Das cmdlet Get-WinEvent ruft Ereignisse aus Ereignisprotokollen ab, einschließlich klassischer Protokolle, z. B. der System- und Anwendungs--Protokolle. Das Cmdlet ruft Daten aus Ereignisprotokollen ab, die von der in Windows Vista eingeführten Windows-Ereignisprotokolltechnologie und Ereignissen in Protokolldateien generiert werden, die von Ereignisablaufverfolgung für Windows (ETW)generiert werden. Standardmäßig gibt Get-WinEvent Ereignisinformationen in der Reihenfolge der neuesten bis ältesten zurück.

Get-WinEvent listet Ereignisprotokolle und Ereignisprotokollanbieter auf. Um den Befehl zu unterbrechen, drücken Sie STRG+C. Sie können Ereignisse aus ausgewählten Protokollen oder aus Protokollen abrufen, die von ausgewählten Ereignisanbietern generiert werden. Außerdem können Sie Ereignisse aus mehreren Quellen in einem einzigen Befehl kombinieren. mit Get-WinEvent können Sie Ereignisse mithilfe von XPath-Abfragen, strukturierten XML-Abfragen und Hashtabellenabfragen filtern.

Wenn Sie PowerShell nicht als Administrator ausführen, werden möglicherweise Fehlermeldungen angezeigt, die Sie nicht über ein Protokoll abrufen können.

Beispiele

Beispiel 1: Abrufen aller Protokolle von einem lokalen Computer

Dieser Befehl ruft alle Ereignisprotokolle auf dem lokalen Computer ab. Protokolle werden in der Reihenfolge aufgeführt, in der sie Get-WinEvent erhalten. Klassische Protokolle werden zuerst abgerufen, gefolgt von den neuen Windows-Ereignisprotokollen. Es ist möglich, dass das RecordCount- eines Protokolls null ist, was leer oder null ist.

Get-WinEvent -ListLog *

LogMode   MaximumSizeInBytes RecordCount LogName
-------   ------------------ ----------- -------
Circular            15532032       14500 Application
Circular             1052672         117 Azure Information Protection
Circular             1052672        3015 CxAudioSvcLog
Circular            20971520             ForwardedEvents
Circular            20971520           0 HardwareEvents

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der ListLog Parameter verwendet das Sternchen (*) zum Anzeigen von Informationen zu den einzelnen Protokollen.

Beispiel 2: Abrufen des klassischen Setupprotokolls

Dieser Befehl ruft ein EventLogConfiguration- -Objekt ab, das das klassische Setup--Protokoll darstellt. Das Objekt enthält Informationen zum Protokoll, z. B. Dateigröße, Anbieter, Dateipfad und ob das Protokoll aktiviert ist.

Get-WinEvent -ListLog Setup | Format-List -Property *

FileSize                       : 69632
IsLogFull                      : False
LastAccessTime                 : 3/13/2019 09:41:46
LastWriteTime                  : 3/13/2019 09:41:46
OldestRecordNumber             : 1
RecordCount                    : 23
LogName                        : Setup
LogType                        : Operational
LogIsolation                   : Application
IsEnabled                      : True
IsClassicLog                   : False
SecurityDescriptor             : O:BAG:SYD: ...
LogFilePath                    : %SystemRoot%\System32\Winevt\Logs\Setup.evtx
MaximumSizeInBytes             : 1052672
LogMode                        : Circular
OwningProviderName             : Microsoft-Windows-Eventlog
ProviderNames                  : {Microsoft-Windows-WUSA, Microsoft-Windows-ActionQueue...
ProviderLevel                  :
ProviderKeywords               :
ProviderBufferSize             : 64
ProviderMinimumNumberOfBuffers : 0
ProviderMaximumNumberOfBuffers : 64
ProviderLatency                : 1000
ProviderControlGuid            :

Das cmdlet Get-WinEvent verwendet den Parameter ListLog, um das Setup--Protokoll anzugeben. Das Objekt wird an das Cmdlet Format-List weitergeleitet. Format-List verwendet den parameter Property mit dem Sternchen (*) zum Anzeigen der einzelnen Eigenschaften.

Beispiel 3: Konfigurieren des klassischen Sicherheitsprotokolls

Dieser Befehl ruft ein EventLogConfiguration--Objekt ab, das das klassische Security Protokoll darstellt. Das Objekt wird dann verwendet, um Einstellungen für das Protokoll zu konfigurieren, z. B. maximale Dateigröße, Dateipfad und ob das Protokoll aktiviert ist.

$log = Get-WinEvent -ListLog Security
$log.MaximumSizeInBytes = 1gb
try{
   $log.SaveChanges()
   Get-WinEvent -ListLog Security | Format-List -Property *
}catch [System.UnauthorizedAccessException]{
   $ErrMsg  = 'You do not have permission to configure this log!'
   $ErrMsg += ' Try running this script with administrator privileges. '
   $ErrMsg += $_.Exception.Message
   Write-Error $ErrMsg
}

FileSize                       : 69632
IsLogFull                      : False
LastAccessTime                 : 3/13/2019 09:41:46
LastWriteTime                  : 3/13/2019 09:41:46
OldestRecordNumber             : 1
RecordCount                    : 23
LogName                        : Security
LogType                        : Administrative
LogIsolation                   : Custom
IsEnabled                      : True
IsClassicLog                   : True
SecurityDescriptor             : O:BAG:SYD: ...
LogFilePath                    : %SystemRoot%\System32\Winevt\Logs\Security.evtx
MaximumSizeInBytes             : 1073741824
LogMode                        : Circular
OwningProviderName             :
ProviderNames                  : {Microsoft-Windows-WUSA, Microsoft-Windows-ActionQueue...
ProviderLevel                  :
ProviderKeywords               :
ProviderBufferSize             : 64
ProviderMinimumNumberOfBuffers : 0
ProviderMaximumNumberOfBuffers : 64
ProviderLatency                : 1000
ProviderControlGuid            :

Das cmdlet Get-WinEvent verwendet den Parameter ListLog, um das protokoll Security anzugeben. Das Objekt wird in einer Variablen gespeichert. Die eigenschaft MaximumSizeInBytes wird für das Objekt auf 1 GIGABYTE festgelegt. Die SaveChanges--Methode wird aufgerufen, um die Änderung an das System innerhalb eines Versuchsblocks zur Behandlung von Zugriffsverletzungen zu übertragen. Das cmdlet Get-WinEvent wird erneut im protokoll Security aufgerufen und an das cmdlet Format-List weitergeleitet, um zu überprüfen, ob die MaximumSizeInBytes- eigenschaft auf dem Computer gespeichert wurde.

Beispiel 4: Abrufen von Ereignisprotokollen von einem Server

Dieser Befehl ruft nur Ereignisprotokolle auf dem lokalen Computer ab, der Ereignisse enthält. Die RecordCount- eines Protokolls kann null oder null sein. Im Beispiel wird die $_ Variable verwendet. Weitere Informationen finden Sie unter about_Automatic_Variables.

Get-WinEvent -ListLog * -ComputerName localhost | Where-Object { $_.RecordCount }

LogMode   MaximumSizeInBytes RecordCount LogName
-------   ------------------ ----------- -------
Circular            15532032       14546 Application
Circular             1052672         117 Azure Information Protection
Circular             1052672        2990 CxAudioSvcLog
Circular             1052672           9 MSFTVPN Setup
Circular             1052672         282 OAlerts

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der ListLog Parameter verwendet das Sternchen (*) zum Anzeigen von Informationen zu den einzelnen Protokollen. Der parameter ComputerName gibt an, die Protokolle vom lokalen Computer abzurufen, localhost-. Die Objekte werden an das Cmdlet Where-Object weitergeleitet. Where-Object verwendet $_.RecordCount, um nur Protokolle zurückzugeben, die Daten enthalten. $_ ist eine Variable, die das aktuelle Objekt in der Pipeline darstellt. RecordCount ist eine Eigenschaft des Objekts mit einem Wert ungleich NULL.

Beispiel 5: Abrufen von Ereignisprotokollen von mehreren Servern

In diesem Beispiel werden Objekte abgerufen, die die ereignisprotokolle Application auf drei Computern darstellen: Server01, Server02 und Server03. Das schlüsselwort ForEach wird verwendet, da der ComputerName Parameter nur einen Wert akzeptiert. Weitere Informationen finden Sie unter about_Foreach.

$S = 'Server01', 'Server02', 'Server03'
ForEach ($Server in $S) {
  Get-WinEvent -ListLog Application -ComputerName $Server |
    Select-Object LogMode, MaximumSizeInBytes, RecordCount, LogName,
      @{name='ComputerName'; expression={$Server}} |
    Format-Table -AutoSize
}

LogMode MaximumSizeInBytes RecordCount LogName     ComputerName
 ------- ------------------ ----------- -------     ------------
Circular           15532032       14577 Application Server01
Circular           15532032        9689 Application Server02
Circular           15532032        5309 Application Server03

Die Variable $S speichert die Namen drei Server: Server01, Server02und Server03. Die ForEach--Anweisung verwendet eine Schleife, um jeden Server ($Server in $S)zu verarbeiten. Der Skriptblock in den geschweiften Klammern ({ }) führt den Get-WinEvent Befehl aus. Der parameter ListLog gibt das protokoll Application an. Der parameter ComputerName verwendet die Variable $Server, um Protokollinformationen von jedem Server abzurufen.

Die Objekte werden an das Cmdlet Select-Object weitergeleitet. Select-Object ruft die Eigenschaften LogMode, MaximumSizeInBytes, RecordCount, LogNameund verwendet einen berechneten Ausdruck, um den ComputerName mithilfe der $Server Variablen anzuzeigen. Die Objekte werden an das Cmdlet Format-Table gesendet, um die Ausgabe in der PowerShell-Konsole anzuzeigen. Die AutoSize Parameter formatiert die Ausgabe so, dass sie auf den Bildschirm passt.

Beispiel 6: Abrufen von Ereignisprotokollanbietern und Protokollnamen

Dieser Befehl ruft die Ereignisprotokollanbieter und die Protokolle ab, in die sie schreiben.

Get-WinEvent -ListProvider *

Name     : .NET Runtime
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : .NET Runtime Optimization Service
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der ListProvider Parameter verwendet das Sternchen (*) zum Anzeigen von Informationen zu jedem Anbieter. In der Ausgabe ist der Name der Anbieter, und LogLinks ist das Protokoll, in das der Anbieter schreibt.

Beispiel 7: Abrufen aller Ereignisprotokollanbieter, die in ein bestimmtes Protokoll schreiben

Dieser Befehl ruft alle Anbieter ab, die in das Application Protokoll schreiben.

(Get-WinEvent -ListLog Application).ProviderNames

.NET Runtime
.NET Runtime Optimization Service
Application
Application Error
Application Hang
Application Management

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der parameter ListLog verwendet Application zum Abrufen von Objekten für dieses Protokoll. ProviderNames- ist eine Eigenschaft des Objekts und zeigt die Anbieter an, die in das Application-Protokoll schreiben.

Beispiel 8: Abrufen von Ereignisprotokollanbieternamen, die eine bestimmte Zeichenfolge enthalten

Dieser Befehl ruft die Ereignisprotokollanbieter mit Namen ab, die eine bestimmte Zeichenfolge im Namen des Anbieters enthalten.

Get-WinEvent -ListProvider *Policy*

Name     : Group Policy Applications
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : Group Policy Client
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : Group Policy Data Sources
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der ListProvider Parameter verwendet das Sternchen (*) zum Suchen Richtlinie überall im Namen des Anbieters.

Beispiel 9: Abrufen von Ereignis-IDs, die der Ereignisanbieter generiert

Dieser Befehl listet die Ereignis-IDs auf, die der Microsoft-Windows-GroupPolicy Ereignisanbieters zusammen mit der Ereignisbeschreibung generiert.

(Get-WinEvent -ListProvider Microsoft-Windows-GroupPolicy).Events | Format-Table Id, Description

Id  Description
  --  -----------
1500  The Group Policy settings for the computer were processed successfully...
1501  The Group Policy settings for the user were processed successfully...
4115  Group Policy Service started.
4116  Started the Group Policy service initialization phase.
4117  Group Policy Session started.

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der parameter ListProvider gibt den Anbieter an, Microsoft-Windows-GroupPolicy. Der Ausdruck wird in Klammern eingeschlossen und verwendet die Events-Eigenschaft, um Objekte abzurufen. Die Objekte werden an das Cmdlet Format-Table weitergeleitet. Format-Table zeigt die ID- und Beschreibung der Ereignisobjekte an.

Beispiel 10: Abrufen von Protokollinformationen aus Ereignisobjekteigenschaften

In diesem Beispiel wird gezeigt, wie Informationen zum Inhalt eines Protokolls mithilfe von Ereignisobjekteigenschaften abgerufen werden. Ereignisobjekte werden in einer Variablen gespeichert und dann nach Ereignis-ID und Level-gruppiert und gezählt.

$Event = Get-WinEvent -LogName 'Windows PowerShell'
$Event.Count
$Event | Group-Object -Property Id -NoElement | Sort-Object -Property Count -Descending
$Event | Group-Object -Property LevelDisplayName -NoElement

195

Count  Name
-----  ----
  147  600
   22  400
   21  601
    3  403
    2  103

Count  Name
-----  ----
    2  Warning
  193  Information

Das cmdlet Get-WinEvent verwendet den parameter LogName, um das Windows PowerShell-Ereignisprotokoll anzugeben. Die Ereignisobjekte werden in der $Event Variablen gespeichert. Die eigenschaft Count von $Eventzeigt die Gesamtanzahl der protokollierten Ereignisse an.

Die variable $Event wird an das Cmdlet Group-Object weitergeleitet. Group-Object verwendet den Parameter Property, um die eigenschaft Id anzugeben und die Objekte nach dem Ereignis-ID-Wert zu zählen. Der NoElement-Parameter entfernt andere Eigenschaften aus der Objektausgabe. Die gruppierten Objekte werden an das Cmdlet Sort-Object weitergeleitet. Sort-Object verwendet den Parameter Property, um die Objekte nach Countzu sortieren. Der parameter Descending zeigt die Ausgabe nach Anzahl an, von der höchsten bis zur niedrigsten. In der Ausgabe enthält die Spalte Count die Gesamtanzahl jedes Ereignisses. Die Spalte Name enthält die gruppierten Ereignis-ID-Nummern.

Die variable $Event wird an das Cmdlet Group-Object weitergeleitet. Group-Object verwendet den Parameter Property, um die LevelDisplayName-eigenschaft anzugeben und die Objekte nach LevelDisplayName-zu zählen. Die Objekte werden nach den Ebenen wie Warnung und Informationgruppiert. Der NoElement Parameter entfernt andere Eigenschaften aus der Ausgabe. In der Ausgabe enthält die Spalte Count die Gesamtanzahl jedes Ereignisses. Die Spalte Name enthält die gruppierte LevelDisplayName-.

Beispiel 11: Abrufen von Fehlerereignissen mit einer angegebenen Zeichenfolge in ihrem Namen

In diesem Beispiel wird eine durch Trennzeichen getrennte Zeichenfolge von Protokollnamen verwendet. Die Ausgabe wird nach der Ebene, z. B. Fehler oder Warnung, und dem Protokollnamen gruppiert.

Get-WinEvent -LogName *PowerShell*, Microsoft-Windows-Kernel-WHEA* |
  Group-Object -Property LevelDisplayName, LogName -NoElement |
    Format-Table -AutoSize

Count  Name
-----  ----
    1  Error, PowerShellCore/Operational
   26  Information, Microsoft-Windows-Kernel-WHEA/Operational
  488  Information, Microsoft-Windows-PowerShell/Operational
   77  Information, PowerShellCore/Operational
 9835  Information, Windows PowerShell
   19  Verbose, PowerShellCore/Operational
  444  Warning, Microsoft-Windows-PowerShell/Operational
  512  Warning, PowerShellCore/Operational

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der LogName Parameter verwendet eine durch Trennzeichen getrennte Zeichenfolge mit dem Sternchen (*) zum Angeben der Protokollnamen. Die Objekte werden an das Cmdlet Group-Object weitergeleitet. Group-Object verwendet den Parameter Property, um die Objekte nach LevelDisplayName- und LogName-zu gruppieren. Der NoElement Parameter entfernt andere Eigenschaften aus der Ausgabe. Die gruppierten Objekte werden an das Cmdlet Format-Table weitergeleitet. Format-Table verwendet den parameter AutoSize zum Formatieren der Spalten. Die spalte Count enthält die Gesamtanzahl der einzelnen Ereignisse. Die Spalte Name enthält die gruppierten LevelDisplayName- und LogName-.

Beispiel 12: Abrufen von Ereignissen aus einem archivierten Ereignisprotokoll

Get-WinEvent können Ereignisinformationen aus gespeicherten Protokolldateien abrufen. In diesem Beispiel wird ein archiviertes PowerShell-Protokoll verwendet, das auf dem lokalen Computer gespeichert ist.

Get-WinEvent -Path 'C:\Test\Windows PowerShell.evtx'

ProviderName: PowerShell

TimeCreated              Id LevelDisplayName  Message
-----------              -- ----------------  -------
3/15/2019 13:54:13      403 Information       Engine state is changed from Available to Stopped...
3/15/2019 13:54:13      400 Information       Engine state is changed from None to Available...
3/15/2019 13:54:13      600 Information       Provider "Variable" is Started...
3/15/2019 13:54:13      600 Information       Provider "Function" is Started...
3/15/2019 13:54:13      600 Information       Provider "FileSystem" is Started...

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der parameter Path gibt den Verzeichnis- und Dateinamen an.

Beispiel 13: Abrufen einer bestimmten Anzahl von Ereignissen aus einem archivierten Ereignisprotokoll

Diese Befehle erhalten eine bestimmte Anzahl von Ereignissen aus einem archivierten Ereignisprotokoll. Get-WinEvent verfügt über Parameter, die eine maximale Anzahl von Ereignissen oder die ältesten Ereignisse abrufen können. In diesem Beispiel wird ein archiviertes PowerShell-Protokoll verwendet, das in C:\Test\PowerShellCore Operational.evtxgespeichert ist.

Get-WinEvent -Path 'C:\Test\PowerShellCore Operational.evtx' -MaxEvents 100

ProviderName: PowerShellCore

TimeCreated                 Id   LevelDisplayName  Message
-----------                 --   ----------------  -------
3/15/2019 09:54:54        4104   Warning           Creating Scriptblock text (1 of 1):...
3/15/2019 09:37:13       40962   Information       PowerShell console is ready for user input
3/15/2019 07:56:24        4104   Warning           Creating Scriptblock text (1 of 1):...
...
3/7/2019 10:53:22        40961   Information       PowerShell console is starting up
3/7/2019 10:53:22         8197   Verbose           Runspace state changed to Opening
3/7/2019 10:53:22         8195   Verbose           Opening RunspacePool

Das Cmdlet Get-WinEvent ruft Protokollinformationen vom Computer ab. Der parameter Path gibt das Verzeichnis und den Dateinamen an. Der MaxEvents Parameter gibt an, dass 100 Datensätze angezeigt werden, von der neuesten bis zur ältesten.

Beispiel 14: Ereignisablaufverfolgung für Windows

Ereignisablaufverfolgung für Windows (ETW) schreibt Ereignisse in das Protokoll, wenn Ereignisse auftreten. Die Ereignisse werden in der Reihenfolge der ältesten bis neuesten gespeichert. Eine archivierte ETW-Datei wird als .etl wie TraceLog.etl-gespeichert. Die Ereignisse werden in der Reihenfolge aufgeführt, in der sie in das Protokoll geschrieben werden, sodass der parameter Älteste erforderlich ist.

Get-WinEvent -Path 'C:\Tracing\TraceLog.etl' -Oldest |
  Sort-Object -Property TimeCreated -Descending |
    Select-Object -First 100

Das Cmdlet Get-WinEvent ruft Protokollinformationen aus der archivierten Datei ab. Der parameter Path gibt den Verzeichnis- und Dateinamen an. Der Parameter "Älteste" wird verwendet, um Ereignisse in der Reihenfolge auszugeben, in der sie geschrieben werden, die älteste in die neueste. Die Objekte werden an das Cmdlet Sort-Object gesendet, Sort-Object die Objekte in absteigender Reihenfolge nach dem Wert der TimeCreated-Eigenschaft sortiert. Die Objekte werden an das Cmdlet Select-Object gesendet, das die 100 neuesten Ereignisse anzeigt.

Beispiel 15: Abrufen von Ereignissen aus einem Ereignisablaufverfolgungsprotokoll

In diesem Beispiel wird gezeigt, wie Die Ereignisse aus einer Ereignisablaufverfolgungsprotokolldatei (.etl) und einer archivierten Windows PowerShell-Protokolldatei (.evtx) abgerufen werden. Sie können mehrere Dateitypen in einem einzigen Befehl kombinieren. Da die Dateien denselben Typ von .NET Framework-Objekt enthalten, EventLogRecord, können Sie sie mit den gleichen Eigenschaften filtern. Der Befehl erfordert den Parameter "Oldest", da er aus einer .etl Datei liest, der Parameter "Älteste" gilt jedoch für jede Datei.

Get-WinEvent -Path 'C:\Tracing\TraceLog.etl', 'C:\Test\Windows PowerShell.evtx' -Oldest |
  Where-Object { $_.Id -eq '403' }

Das Cmdlet Get-WinEvent ruft Protokollinformationen aus den archivierten Dateien ab. Der Path Parameter verwendet eine durch Trennzeichen getrennte Liste, um jedes Dateiverzeichnis und jeden Dateinamen anzugeben. Der Parameter "Älteste" wird verwendet, um Ereignisse in der Reihenfolge auszugeben, in der sie geschrieben werden, die älteste in die neueste. Die Objekte werden an das Cmdlet Where-Object weitergeleitet. Where-Object verwendet einen Skriptblock, um Ereignisse mit einer ID von 403zu finden. Die $_ Variable stellt das aktuelle Objekt in der Pipeline dar, und ID ist die Ereignis-ID-Eigenschaft.

Beispiel 16: Filtern von Ereignisprotokollergebnissen

Dieses Beispiel zeigt eine Vielzahl von Methoden zum Filtern und Auswählen von Ereignissen aus einem Ereignisprotokoll. Alle diese Befehle erhalten Ereignisse, die in den letzten 24 Stunden aus dem Windows PowerShell Ereignisprotokoll aufgetreten sind. Die Filtermethoden sind effizienter als die Verwendung des Cmdlets Where-Object. Filter werden angewendet, wenn die Objekte abgerufen werden. Where-Object alle Objekte abruft, wendet dann Filter auf alle Objekte an.

# Using the Where-Object cmdlet:
$Yesterday = (Get-Date) - (New-TimeSpan -Day 1)
Get-WinEvent -LogName 'Windows PowerShell' | Where-Object { $_.TimeCreated -ge $Yesterday }

# Using the FilterHashtable parameter:
$Yesterday = (Get-Date) - (New-TimeSpan -Day 1)
Get-WinEvent -FilterHashtable @{ LogName='Windows PowerShell'; Level=3; StartTime=$Yesterday }

# Using the FilterXML parameter:
$xmlQuery = @'
<QueryList>
  <Query Id="0" Path="Windows PowerShell">
    <Select Path="System">*[System[(Level=3) and
        TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]</Select>
  </Query>
</QueryList>
'@
Get-WinEvent -FilterXML $xmlQuery

# Using the FilterXPath parameter:
$XPath = '*[System[Level=3 and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]'
Get-WinEvent -LogName 'Windows PowerShell' -FilterXPath $XPath

Beispiel 17: Verwenden von FilterHashtable zum Abrufen von Ereignissen aus dem Anwendungsprotokoll

In diesem Beispiel wird der parameter FilterHashtable verwendet, um Ereignisse aus dem Application-Protokoll abzurufen. Die Hashtabelle verwendet Schlüssel/Wert Paaren. Weitere Informationen zum FilterHashtable--Parameter finden Sie unter Erstellen von Get-WinEvent Abfragen mit FilterHashtable-. Weitere Informationen zu Hashtabellen finden Sie unter about_Hash_Tables.

$Date = (Get-Date).AddDays(-2)
Get-WinEvent -FilterHashtable @{ LogName='Application'; StartTime=$Date; Id='1003' }

Das Cmdlet Get-Date verwendet die AddDays- Methode, um ein Datum abzurufen, das zwei Tage vor dem aktuellen Datum liegt. Das Datumsobjekt wird in der variablen $Date gespeichert.

Das Cmdlet Get-WinEvent ruft Protokollinformationen ab. Der FilterHashtable Parameter wird verwendet, um die Ausgabe zu filtern. Der schlüssel LogName gibt den Wert als Application-Protokoll an. Der schlüssel StartTime verwendet den wert, der in der variablen $Date gespeichert ist. Der schlüssel ID verwendet einen Ereignis-ID-Wert 1003.

Beispiel 18: Verwenden von FilterHashtable zum Abrufen von Anwendungsfehlern

In diesem Beispiel wird der parameter FilterHashtable verwendet, um Fehler der Internet Explorer-Anwendung zu finden, die innerhalb der letzten Woche aufgetreten sind.

$StartTime = (Get-Date).AddDays(-7)
Get-WinEvent -FilterHashtable @{
  Logname='Application'
  ProviderName='Application Error'
  Data='iexplore.exe'
  StartTime=$StartTime
}

Das Cmdlet Get-Date verwendet die AddDays--Methode, um ein Datum abzurufen, das sieben Tage vor dem aktuellen Datum liegt. Das Datumsobjekt wird in der variablen $StartTime gespeichert.

Das Cmdlet Get-WinEvent ruft Protokollinformationen ab. Der FilterHashtable Parameter wird verwendet, um die Ausgabe zu filtern. Der schlüssel LogName gibt den Wert als Application-Protokoll an. Der schlüssel ProviderName verwendet den Wert Application Error, bei dem es sich um die Sourcedes Ereignisses handelt. Der schlüssel Data verwendet den Wert iexplore.exe Der schlüssel StartTime schlüssel verwendet den in $StartTime Variablen gespeicherten Wert.

Beispiel 19: Verwenden von SuppressHashFilter zum Filtern von Anwendungsfehlern

Wie in Beispiel 16 oben verwendet dieses Beispiel den parameter FilterHashtable, um Ereignisse aus dem protokoll Application abzurufen. Wir fügen jedoch den SuppressHashFilter Schlüssel hinzu, um Informationen Ebenenereignisse herauszufiltern.

$Date = (Get-Date).AddDays(-2)
$filter = @{
  LogName='Application'
  StartTime=$Date
  SuppressHashFilter=@{Level=4}
}
Get-WinEvent -FilterHashtable $filter

In diesem Beispiel ruft Get-WinEvent alle Ereignisse aus dem Application-Protokoll für die letzten zwei Tage ab, mit Ausnahme derjenigen, die eine Ebene von 4 (Informationen) aufweisen.

Parameter

-ComputerName

Gibt den Namen des Computers an, auf dem dieses Cmdlet Ereignisse aus den Ereignisprotokollen abruft. Geben Sie den NetBIOS-Namen, eine IP-Adresse oder den vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) des Computers ein. Der Standardwert ist der lokale Computer, localhost-. Dieser Parameter akzeptiert jeweils nur einen Computernamen.

Um Ereignisprotokolle von Remotecomputern abzurufen, konfigurieren Sie den Firewallport für den Ereignisprotokolldienst, um den Remotezugriff zu ermöglichen.

Dieses Cmdlet basiert nicht auf PowerShell-Remoting. Sie können den parameter ComputerName verwenden, auch wenn Ihr Computer nicht für die Ausführung von Remotebefehlen konfiguriert ist.

Typ:String
Aliase:Cn
Position:Named
Standardwert:Local computer
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Credential

Gibt ein Benutzerkonto an, das über die Berechtigung zum Ausführen dieser Aktion verfügt. Der Standardwert ist der aktuelle Benutzer.

Geben Sie einen Benutzernamen ein, z. B. User01 oder Domäne01\User01. Oder geben Sie ein PSCredential--Objekt ein, z. B. ein Objekt, das vom Cmdlet Get-Credential generiert wird. Wenn Sie einen Benutzernamen eingeben, werden Sie zur Eingabe eines Kennworts aufgefordert. Wenn Sie nur den Parameternamen eingeben, werden Sie sowohl für einen Benutzernamen als auch für ein Kennwort aufgefordert.

Typ:PSCredential
Position:Named
Standardwert:Current user
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-FilterHashtable

Gibt eine Abfrage im Hashtabellenformat an, um Ereignisse aus einem oder mehreren Ereignisprotokollen auszuwählen. Die Abfrage enthält eine Hashtabelle mit mindestens einem Schlüssel/Wert Paaren.

Hashtabellenabfragen weisen die folgenden Regeln auf:

  • Bei Schlüsseln und Werten wird die Groß-/Kleinschreibung nicht beachtet.
  • Wildcardzeichen sind nur in den Werten gültig, die den LogName- und ProviderName- Schlüsseln zugeordnet sind.
  • Jeder Schlüssel kann nur einmal in jeder Hashtabelle aufgeführt werden.
  • Der Path-Wert verwendet Pfade zu .etl, .evtund .evtx Protokolldateien.
  • Die LogName-, Path-und ProviderName Schlüssel können in derselben Abfrage verwendet werden.
  • Der UserID- Schlüssel kann eine gültige Sicherheits-ID (SID) oder einen Domänenkontonamen verwenden, mit dem ein gültiges System.Security.Principal.NTAccount-Objekterstellt werden kann.
  • Der wert Data übernimmt Ereignisdaten in einem unbenannten Feld. Beispielsweise Ereignisse in klassischen Ereignisprotokollen.
  • <named-data> Schlüssel stellt ein benanntes Ereignisdatenfeld dar.

Wenn Get-WinEvent ein Schlüssel-Wert-Wert- paar nicht interpretieren kann, interpretiert es den Schlüssel als Namen mit Groß-/Kleinschreibung für die Ereignisdaten im Ereignis.

Die gültigen Get-WinEventSchlüssel/Wert Paaren sind wie folgt:

  • LogName-=<String[]>
  • ProviderName-=<String[]>
  • Pfad-=<String[]>
  • Schlüsselwörter=<Long[]>
  • ID-=<Int32[]>
  • Level-=<Int32[]>
  • StartTime-=<DateTime>
  • EndTime-=<DateTime>
  • UserID-=<SID>
  • Daten-=<String[]>
  • <named-data>=<String[]>
  • SuppressHashFilter-=<Hashtable>
Typ:Hashtable[]
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-FilterXml

Gibt eine strukturierte XML-Abfrage an, die dieses Cmdlet Ereignisse aus einem oder mehreren Ereignisprotokollen auswählt.

Verwenden Sie zum Generieren einer gültigen XML-Abfrage die Create Custom View und Filter Current Log Features in der Windows-Ereignisanzeige. Verwenden Sie die Elemente im Dialogfeld, um eine Abfrage zu erstellen, und klicken Sie dann auf die XML-Registerkarte, um die Abfrage im XML-Format anzuzeigen. Sie können den XML-Code aus der XML-Registerkarte in den Wert des FilterXml-Parameters kopieren. Weitere Informationen zu den Features der Ereignisanzeige finden Sie in der Hilfe zur Ereignisanzeige.

Verwenden Sie eine XML-Abfrage, um eine komplexe Abfrage zu erstellen, die mehrere XPath-Anweisungen enthält. Mit dem XML-Format können Sie auch ein Suppress XML-Element verwenden, das Ereignisse aus der Abfrage ausschließt. Weitere Informationen zum XML-Schema für Ereignisprotokollabfragen finden Sie unter Abfrageschema- und im Abschnitt "XML-Ereignisabfragen" von Event Selection.

Sie können auch ein Suppress-Element mithilfe des FilterHashtable--Parameters erstellen.

Typ:XmlDocument
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-FilterXPath

Gibt eine XPath-Abfrage an, die dieses Cmdlet Ereignisse aus einem oder mehreren Protokollen auswählt.

Weitere Informationen zur XPath-Sprache finden Sie unter XPath Reference und im Abschnitt "Auswahlfilter" ereignisauswahl.

Typ:String
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Force

Ruft Debug- und Analyseprotokolle zusätzlich zu anderen Ereignisprotokollen ab. Der Force Parameter ist erforderlich, um ein Debug- oder Analyseprotokoll abzurufen, wenn der Wert des Namensparameters Wildcardzeichen enthält.

Standardmäßig schließt das cmdlet Get-WinEvent diese Protokolle aus, es sei denn, Sie geben den vollständigen Namen eines Debug- oder Analyseprotokolls an.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-ListLog

Gibt die Ereignisprotokolle an. Geben Sie die Ereignisprotokollnamen in eine durch Trennzeichen getrennte Liste ein. Wildcards sind zulässig. Um alle Protokolle abzurufen, verwenden Sie das Sternchen (*) -Wildcard.

Typ:String[]
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:True

-ListProvider

Gibt die Ereignisprotokollanbieter an, die dieses Cmdlet abruft. Ein Ereignisprotokollanbieter ist ein Programm oder Dienst, das Ereignisse in das Ereignisprotokoll schreibt.

Geben Sie die Anbieternamen in eine durch Trennzeichen getrennte Liste ein. Wildcards sind zulässig. Um die Anbieter aller Ereignisprotokolle auf dem Computer abzurufen, verwenden Sie das Sternchen (*) -Wildcard.

Typ:String[]
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:True

-LogName

Gibt die Ereignisprotokolle an, aus denen dieses Cmdlet Ereignisse abrufen kann. Geben Sie die Ereignisprotokollnamen in eine durch Trennzeichen getrennte Liste ein. Wildcards sind zulässig. Sie können auch Protokollnamen an das Cmdlet Get-WinEvent weiterleiten.

Anmerkung

PowerShell beschränkt nicht die Anzahl der Protokolle, die Sie anfordern können. Das cmdlet Get-WinEvent fragt jedoch die Windows-API ab, die einen Grenzwert von 256 hat. Dies kann es schwierig machen, alle Ihre Protokolle gleichzeitig zu filtern. Sie können dies umgehen, indem Sie eine foreach Schleife verwenden, um jedes Protokoll wie folgt zu durchlaufen: Get-WinEvent -ListLog * | ForEach-Object{ Get-WinEvent -LogName $_.Logname }

Typ:String[]
Position:0
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:True

-MaxEvents

Gibt die maximale Anzahl von Ereignissen an, die zurückgegeben werden. Geben Sie eine ganze Zahl ein, z. B. 100. Standardmäßig werden alle Ereignisse in den Protokollen oder Dateien zurückgegeben.

Typ:Int64
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Oldest

Geben Sie an, dass dieses Cmdlet die Ereignisse in der ältesten ersten Reihenfolge abruft. Standardmäßig werden Ereignisse in der neuesten Reihenfolge zurückgegeben.

Dieser Parameter ist erforderlich, um Ereignisse aus .etl und .evt Dateien sowie aus Debug- und Analyseprotokollen abzurufen. In diesen Dateien werden Ereignisse in der ältesten ersten Reihenfolge aufgezeichnet, und die Ereignisse können nur in der ältesten ersten Reihenfolge zurückgegeben werden.

Typ:SwitchParameter
Position:Named
Standardwert:None
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-Path

Gibt den Pfad zu den Ereignisprotokolldateien an, von denen dieses Cmdlet Ereignisse abrufen kann. Geben Sie die Pfade zu den Protokolldateien in einer durch Trennzeichen getrennten Liste ein, oder verwenden Sie Zum Erstellen von Dateipfadmustern Wildcardzeichen.

Get-WinEvent unterstützt Dateien mit den Dateinamenerweiterungen .evt, .evtxund .etl. Sie können Ereignisse aus verschiedenen Dateien und Dateitypen in denselben Befehl einschließen.

Typ:String[]
Aliase:PSPath
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:True

-ProviderName

Gibt als Zeichenfolgenarray die Ereignisprotokollanbieter an, aus denen dieses Cmdlet Ereignisse abruft. Geben Sie die Anbieternamen in eine durch Trennzeichen getrennte Liste ein, oder verwenden Sie Zum Erstellen von Anbieternamenmustern Wildcardzeichen.

Ein Ereignisprotokollanbieter ist ein Programm oder Dienst, das Ereignisse in das Ereignisprotokoll schreibt. Es handelt sich nicht um einen PowerShell-Anbieter.

Typ:String[]
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:True

Eingaben

String

Sie können ein LogName- (Zeichenfolge) an dieses Cmdlet weiterleiten.

XmlDocument

Sie können eine FilterXML- Abfrage an dieses Cmdlet weiterleiten.

Hashtable

Sie können eine FilterHashtable- Abfrage an dieses Cmdlet weiterleiten.

Ausgaben

EventLogConfiguration

Mit dem parameter ListLog gibt dieses Cmdlet EventLogConfiguration Objekte zurück.

EventLogRecord

Standardmäßig gibt dieses Cmdlet EventLogRecord-Objekte zurück.

ProviderMetadata

Mit dem parameter ListProvider gibt dieses Cmdlet ProviderMetadata--Objekte zurück.

Hinweise

Get-WinEvent wurde entwickelt, um das cmdlet Get-EventLog auf Computern mit Windows Vista und höheren Versionen von Windows zu ersetzen. Get-EventLog ruft Ereignisse nur in klassischen Ereignisprotokollen ab. Get-EventLog wird aus Gründen der Abwärtskompatibilität beibehalten.

Die Cmdlets Get-WinEvent und Get-EventLog werden in der Windows Pre-Installation Environment (Windows PE) nicht unterstützt.