Freigeben über


Get-WinEvent

Es ruft Ereignisse aus Ereignisprotokollen und Ereignisablaufverfolgung-Protokolldateien auf lokalen Computern 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

Das Get-WinEvent Cmdlet ruft Ereignisse aus Ereignisprotokollen ab, einschließlich klassischer Protokolle, z. B. system- und Anwendungsprotokolle. Das Cmdlet ruft Daten aus Ereignisprotokollen ab, die von der windows-Ereignisprotokolltechnologie generiert werden, die in Windows Vista eingeführt wurden, und Ereignisse in Protokolldateien, die von der Ereignisablaufverfolgung für Windows (ETW) generiert werden. Gibt standardmäßig 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 von Ereignisanbietern generierten Protokollen abrufen. Und Sie können Ereignisse aus mehreren Quellen in einem einzelnen Befehl kombinieren. Get-WinEvent Ermöglicht das Filtern von Ereignissen mithilfe von XPath-Abfragen, strukturierten XML-Abfragen und Hashtabellenabfragen.

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 Get-WinEvent der sie erhalten werden. Klassische Protokolle werden zuerst abgerufen, gefolgt von den neuen Windows-Ereignisprotokollen. Es ist möglich, dass der 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 Get-WinEvent Cmdlet 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 Get-WinEvent Cmdlet verwendet den Parameter ListLog , um das Setupprotokoll anzugeben. Das Objekt wird an das Format-List Cmdlet gesendet. Format-List verwendet den Property-Parameter mit dem Sternchen (*) zum Anzeigen der einzelnen Eigenschaften.

Beispiel 3: Konfigurieren des klassischen Sicherheitsprotokolls

Dieser Befehl ruft ein EventLogConfiguration -Objekt, das das klassische Sicherheitsprotokoll 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 Get-WinEvent Cmdlet verwendet den ListLog-Parameter , um das Sicherheitsprotokoll anzugeben. Das Objekt wird in einer Variablen gespeichert. Die MaximumSizeInBytes-Eigenschaft wird für das Objekt auf 1 Gigabyte festgelegt. Die SaveChanges-Methode wird aufgerufen, um die Änderung an das System innerhalb eines Versuchsblocks zu übertragen, um Zugriffsverletzungen zu behandeln. Das Get-WinEvent Cmdlet wird erneut im Sicherheitsprotokoll aufgerufen und an das Format-List Cmdlet 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. Es ist möglich, dass der RecordCount eines Protokolls null oder null ist. 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 Get-WinEvent Cmdlet ruft Protokollinformationen vom Computer ab. Der ListLog-Parameter verwendet das Sternchen (*) zum Anzeigen von Informationen zu den einzelnen Protokollen. Der Parameter ComputerName gibt an, dass die Protokolle vom lokalen Computer , localhost, abgerufen werden sollen. Die Objekte werden an das Where-Object Cmdlet gesendet. 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 Anwendungsereignisprotokolle 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, Server02 und Server03. Die ForEach-Anweisung verwendet eine Schleife, um jeden Server zu verarbeiten. ($Server in $S) Der Skriptblock in den geschweiften geschweiften Klammern ({ }) führt den Get-WinEvent Befehl aus. Der ListLog-Parameter gibt das Anwendungsprotokoll an. Der Parameter ComputerName verwendet die Variable $Server , um Protokollinformationen von jedem Server abzurufen.

Die Objekte werden an das Select-Object Cmdlet gesendet. Select-Object ruft die Eigenschaften "LogMode", "MaximumSizeInBytes", "RecordCount", "LogName" ab und verwendet einen berechneten Ausdruck, um den ComputerName mithilfe der $Server Variablen anzuzeigen. Die Objekte werden an das Format-Table Cmdlet gesendet, um die Ausgabe in der PowerShell-Konsole anzuzeigen. Der 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 Get-WinEvent Cmdlet 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 Anwendungsprotokoll schreiben.

(Get-WinEvent -ListLog Application).ProviderNames

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

Das Get-WinEvent Cmdlet ruft Protokollinformationen vom Computer ab. Der ListLog-Parameter verwendet Application , um Objekte für dieses Protokoll abzurufen. ProviderNames ist eine Eigenschaft des Objekts und zeigt die Anbieter an, die in das Anwendungsprotokoll 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 Get-WinEvent Cmdlet ruft Protokollinformationen vom Computer ab. Der Parameter ListProvider verwendet den Sternchen (*) zum Auffinden der Richtlinie an einer beliebigen Stelle 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-Ereignisanbieter 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 Get-WinEvent Cmdlet ruft Protokollinformationen vom Computer ab. Der Parameter ListProvider gibt den Anbieter Microsoft-Windows-GroupPolicy an. Der Ausdruck wird in Klammern eingeschlossen und verwendet die Events-Eigenschaft , um Objekte abzurufen. Die Objekte werden an das Format-Table Cmdlet gesendet. 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 Ebene 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 Get-WinEvent Cmdlet verwendet den Parameter LogName , um das Windows PowerShell-Ereignisprotokoll anzugeben. Die Ereignisobjekte werden in der $Event Variablen gespeichert. Die Count-Eigenschaft zeigt $Eventdie Gesamtanzahl der protokollierten Ereignisse an.

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

Die $Event Variable wird an das Group-Object Cmdlet gesendet. 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 Informationen gruppiert. Der Parameter NoElement entfernt andere Eigenschaften aus der Ausgabe. In der Ausgabe enthält die Spalte "Anzahl " die Gesamtanzahl jedes Ereignisses. Die Spalte "Name " enthält den gruppierten 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 Get-WinEvent Cmdlet 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 Group-Object Cmdlet gesendet. Group-Object verwendet den Parameter Property , um die Objekte nach LevelDisplayName und LogName zu gruppieren. Der Parameter NoElement entfernt andere Eigenschaften aus der Ausgabe. Die gruppierten Objekte werden an das Format-Table Cmdlet gesendet. Format-Table verwendet den Parameter "AutoSize ", um die Spalten zu formatieren. Die Spalte "Anzahl" enthält die Gesamtanzahl der einzelnen Ereignisse. Die Spalte "Name " enthält den gruppierten LevelDisplayName und LogName.

Beispiel 12: Abrufen von Ereignissen aus einem archivierten Ereignisprotokoll

Get-WinEvent kann 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 Get-WinEvent Cmdlet ruft Protokollinformationen vom Computer ab. Der Parameter Path gibt das Verzeichnis und den 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.evtx gespeichert 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 Get-WinEvent Cmdlet ruft Protokollinformationen vom Computer ab. Der Parameter Path gibt das Verzeichnis und den Dateinamen an. Der Parameter MaxEvents 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 eine wie TraceLog.etl gespeichert. Die Ereignisse werden in der Reihenfolge aufgeführt, in der sie in das Protokoll geschrieben werden, sodass der älteste Parameter erforderlich ist.

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

Das Get-WinEvent Cmdlet ruft Protokollinformationen aus der archivierten Datei ab. Der Parameter Path gibt das Verzeichnis und den Dateinamen an. Der älteste Parameter wird verwendet, um Ereignisse in der Reihenfolge auszugeben, in der sie geschrieben werden, die älteste auf die neueste. Die Objekte werden an das Sort-Object Cmdlet Sort-Object nach unten gesendet und sortiert die Objekte in absteigender Reihenfolge nach dem Wert der TimeCreated-Eigenschaft . Die Objekte werden an das Select-Object Cmdlet 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, können Sie sie mit denselben Eigenschaften filtern. Der Befehl erfordert den Parameter "Älteste", 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 Get-WinEvent Cmdlet ruft Protokollinformationen aus den archivierten Dateien ab. Der Parameter "Path " verwendet eine durch Trennzeichen getrennte Liste, um jedes Dateiverzeichnis und jeden Dateinamen anzugeben. Der älteste Parameter wird verwendet, um Ereignisse in der Reihenfolge auszugeben, in der sie geschrieben werden, die älteste auf die neueste. Die Objekte werden an das Where-Object Cmdlet gesendet. Where-Object verwendet einen Skriptblock, um Ereignisse mit einer ID von 403 zu finden. Die $_ Variable stellt das aktuelle Objekt in der Pipeline dar und die 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 Where-Object Cmdlets. Filter werden angewendet, wenn die Objekte abgerufen werden. Where-Object ruft alle Objekte ab und 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 FilterHashtable-Parameter verwendet, um Ereignisse aus dem Anwendungsprotokoll abzurufen. Die Hashtabelle verwendet Schlüssel-Wert-Paare . Weitere Informationen zum Parameter FilterHashtable finden Sie unter Erstellen von Get-WinEvent-Abfragen mit FilterHashtable. Weitere Informationen zu Hashtabellen finden Sie unter about_Hash_Tables (Informationen zu Hashtabellen).

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

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

Das Get-WinEvent Cmdlet ruft Protokollinformationen ab. Der FilterHashtable-Parameter wird verwendet, um die Ausgabe zu filtern. Der LogName-Schlüssel gibt den Wert als Anwendungsprotokoll an. Der StartTime-Schlüssel verwendet den in der $Date Variablen gespeicherten Wert. Der ID-Schlüssel verwendet einen Ereignis-ID-Wert 1003.

Beispiel 18: Verwenden von FilterHashtable zum Abrufen von Anwendungsfehlern

In diesem Beispiel wird der FilterHashtable-Parameter 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 Get-Date Cmdlet verwendet die AddDays-Methode , um ein Datum abzurufen, das sieben Tage vor dem aktuellen Datum liegt. Das Datumsobjekt wird in der $StartTime Variablen gespeichert.

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

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 nur jeweils 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 " auch dann verwenden, 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\Benutzer01". Oder geben Sie ein PSCredential-Objekt ein, z. B. ein objekt, das Get-Credential vom Cmdlet generiert wurde. 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 einem oder mehreren Schlüssel-Wert-Paaren .

Hashtabellenabfragen haben die folgenden Regeln:

  • Bei Schlüsseln und Werten wird die Groß-/Kleinschreibung nicht beachtet.
  • Wildcardzeichen sind nur in den Werten gültig, die den Schlüsseln "LogName " und "ProviderName " zugeordnet sind.
  • Jeder Schlüssel kann nur einmal in jeder Hashtabelle aufgeführt werden.
  • Der Pfadwert verwendet Pfade zu .etl, .evtund .evtx Protokolldateien.
  • Die Schlüssel "LogName", "Pfad" und "ProviderName " können in derselben Abfrage verwendet werden.
  • Der UserID-Schlüssel kann einen gültigen Sicherheitsbezeichner (Security Identifier, SID) oder einen Domänenkontonamen verwenden, der zum Erstellen eines gültigen System.Security.Principal.NTAccount-Objekts verwendet werden kann.
  • Der Datenwert akzeptiert Ereignisdaten in einem unbenannten Feld. Beispielsweise Ereignisse in klassischen Ereignisprotokollen.

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

Die gültigen Get-WinEvent Schlüssel-Wert-Paare sind wie folgt:

  • LogName=<String[]>
  • ProviderName=<String[]>
  • Pfad=<String[]>
  • Schlüsselwörter=<Long[]>
  • ID=<Int32[]>
  • Grad=<Int32[]>
  • StartTime=<DateTime>
  • EndTime=<DateTime>
  • UserID=<SID>
  • Daten=<String[]>
Typ:Hashtable[]
Position:1
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 Features "Benutzerdefinierte Ansicht erstellen" und "Aktuelles Protokoll filtern" in Windows Ereignisanzeige. Verwenden Sie die Elemente im Dialogfeld, um eine Abfrage zu erstellen, und klicken Sie dann auf die Registerkarte „XML“, um die Abfrage im XML-Format anzuzeigen. Sie können den XML-Code auf der Registerkarte "XML" in den Wert des Parameters "FilterXml " kopieren. Weitere Informationen zu den Funktionen 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 im Abschnitt "Abfrageschema " und im Abschnitt "XML-Ereignisabfragen" der Ereignisauswahl.

Typ:XmlDocument
Position:1
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 im Abschnitt "XPath-Referenz " und im Abschnitt "Auswahlfilter" der Ereignisauswahl.

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

-Force

Ruft Debug- und Analyseprotokolle sowie andere Ereignisprotokolle 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 Get-WinEvent Cmdlet 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 Namen der Ereignisprotokolle in eine durch Kommas getrennte Liste ein. Platzhalter sind zulässig. Um alle Protokolle abzurufen, verwenden Sie den Sternchen (*)-Wildcard.

Typ:String[]
Position:1
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, der Ereignisse in das Ereignisprotokoll schreibt.

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

Typ:String[]
Position:1
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 Namen der Ereignisprotokolle in eine durch Kommas getrennte Liste ein. Platzhalter sind zulässig. Sie können auch Protokollnamen an das Get-WinEvent Cmdlet weiterleiten.

Hinweis

PowerShell beschränkt nicht die Anzahl der Protokolle, die Sie anfordern können. Das Get-WinEvent Cmdlet 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:1
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 zuerst die neuesten Ereignisse zurückgegeben.

Dieser Parameter ist erforderlich, um Ereignisse aus .etl und .evt Dateien und aus Debug- und Analyseprotokollen abzurufen. In diesen Dateien werden zuerst die ältesten Ereignisse aufgezeichnet, und es können auch nur die ältesten Ereignisse zuerst 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 eine durch Kommas getrennte Liste ein, oder verwenden Sie Platzhalterzeichen, um Dateipfadmuster zu erstellen.

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

Typ:String[]
Aliase:PSPath
Position:1
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 Kommas getrennte Liste ein, oder verwenden Sie Platzhalterzeichen, um Anbieternamensmuster zu erstellen.

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

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

Eingaben

String

Sie können einen 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 ist so konzipiert, dass das Get-EventLog Cmdlet auf Computern mit Windows Vista und höheren Versionen von Windows ersetzt wird. Get-EventLog ruft Ereignisse nur in klassischen Ereignisprotokollen ab. Get-EventLog wird aus Gründen der Abwärtskompatibilität beibehalten.

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