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
Dieses Cmdlet ist nur auf der Windows-Plattform verfügbar.
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 $Event
die 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) <= 86400000]]]</Select>
</Query>
</QueryList>
'@
Get-WinEvent -FilterXML $xmlQuery
# Using the FilterXPath parameter:
$XPath = '*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 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.
Beispiel 19: Verwenden von SuppressHashFilter zum Filtern von Anwendungsfehlern
Wie in Beispiel 16 oben verwendet dieses Beispiel den Parameter "FilterHashtable ", um Ereignisse aus dem Anwendungsprotokoll abzurufen. Wir fügen jedoch den SuppressHashFilter-Schlüssel hinzu, um Ereignisse auf Informationsebene herauszufiltern.
$Date = (Get-Date).AddDays(-2)
$filter = @{
LogName='Application'
StartTime=$Date
SuppressHashFilter=@{Level=4}
}
Get-WinEvent -FilterHashtable $filter
In diesem Beispiel werden alle Ereignisse aus dem Anwendungsprotokoll für die letzten zwei Tage abgerufen, Get-WinEvent
mit Ausnahme von Ereignissen mit einer Ebene von 4 (Informationen).
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
,.evt
und.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.
<named-data>
key represents a named event data field.
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[]>
<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 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.
Sie können auch ein Suppress-Element mit dem Parameter FilterHashtable 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 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: | 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, 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: | 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 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: | 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 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 .evt
Dateinamenerweiterungen , .evtx
und .etl
die Dateinamenerweiterungen. Sie können Ereignisse aus verschiedenen Dateien und Dateitypen in demselben 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 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: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | True |
Eingaben
Sie können einen LogName (Zeichenfolge) an dieses Cmdlet weiterleiten.
Sie können eine FilterXML-Abfrage an dieses Cmdlet weiterleiten.
Sie können eine FilterHashtable-Abfrage an dieses Cmdlet weiterleiten.
Ausgaben
Mit dem Parameter ListLog gibt dieses Cmdlet EventLogConfiguration-Objekte zurück.
Standardmäßig gibt dieses Cmdlet EventLogRecord-Objekte zurück.
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.