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 in Windows Vista eingeführten Windows-Ereignisprotokolltechnologie generiert werden. Und Ereignisse in Protokolldateien, die von der Ereignisablaufverfolgung für Windows (ETW) generiert wurden. Gibt standardmäßig Get-WinEvent
Ereignisinformationen in der Reihenfolge von neuester bis ältester zurück.
Get-WinEvent
listet Ereignisprotokolle und Ereignisprotokollanbieter auf. Drücken Sie STRG+C, um den Befehl zu unterbrechen. 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, dass Sie keine Informationen zu einem Protokoll abrufen können.
Beispiele
Beispiel 1: Abrufen aller Protokolle von einem lokalen Computer
Mit diesem Befehl werden alle Ereignisprotokolle auf dem lokalen Computer abgerufen. Protokolle werden in der Reihenfolge aufgeführt, in Get-WinEvent
der sie abgerufen werden. Klassische Protokolle werden zuerst abgerufen, gefolgt von den neuen Windows-Ereignisprotokollen.
Es ist möglich, dass der RecordCount eines Protokolls NULL ist, also leer oder null.
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 (*
) platzhalter, um Informationen zu den einzelnen Protokollen anzuzeigen.
Beispiel 2: Abrufen des klassischen Setupprotokolls
Mit diesem Befehl wird ein EventLogConfiguration-Objekt abgerufen, das das klassische Setupprotokoll 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 ListLog-Parameter , um das Setupprotokoll anzugeben. Das Objekt wird in der Pipeline an das Format-List
Cmdlet gesendet. Format-List
verwendet den Property-Parameter mit dem Platzhalter stern (*
) zum Anzeigen der einzelnen Eigenschaften.
Beispiel 3: Abrufen von Ereignisprotokollen von einem Server
Mit diesem Befehl werden nur Ereignisprotokolle auf dem lokalen Computer abgerufen, die Ereignisse enthalten. Es ist möglich, dass der RecordCount eines Protokolls NULL oder 0 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 (*
) platzhalter, um Informationen zu den einzelnen Protokollen anzuzeigen. Der ComputerName-Parameter gibt an, die Protokolle vom lokalen Computer localhost abzurufen. Die Objekte werden in der Pipeline 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 4: Abrufen von Ereignisprotokollen von mehreren Servern
In diesem Beispiel werden Objekte abgerufen, die die Anwendungsereignisprotokolle auf drei Computern darstellen: Server01, Server02 und Server03. Der ForEach-Schlüsselwort (keyword) 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 Klammern ({ }
) führt den Get-WinEvent
Befehl aus. Der ListLog-Parameter gibt das Anwendungsprotokoll an. Der ComputerName-Parameter verwendet die Variable $Server
, um Protokollinformationen von jedem Server abzurufen.
Die Objekte werden in der Pipeline 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 über die Pipeline an das Format-Table
Cmdlet gesendet, um die Ausgabe in der PowerShell-Konsole anzuzeigen. Der AutoSize-Parameter formatiert die Ausgabe so, dass sie dem Bildschirm entspricht.
Beispiel 5: Abrufen von Ereignisprotokollanbietern und Protokollnamen
Mit diesem Befehl werden die Ereignisprotokollanbieter und die Protokolle abgerufen, 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 den einzelnen Anbietern. In der Ausgabe ist der Name der Anbieter und LogLinks das Protokoll, in das der Anbieter schreibt.
Beispiel 6: Abrufen aller Ereignisprotokollanbieter, die in ein bestimmtes Protokoll schreiben
Mit diesem Befehl werden alle Anbieter abgerufen, 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 7: Abrufen von Ereignisprotokollanbieternamen, die eine bestimmte Zeichenfolge enthalten
Mit diesem Befehl werden die Ereignisprotokollanbieter mit Namen abgerufen, 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 ListProvider-Parameter verwendet das Sternchen (*
) platzhalter, um die Richtlinie an einer beliebigen Stelle im Namen des Anbieters zu suchen.
Beispiel 8: Abrufen von Ereignis-IDs, die der Ereignisanbieter generiert
Dieser Befehl listet die Ereignis-IDs auf, die der Microsoft-Windows-GroupPolicy-Ereignisanbieter generiert, zusammen mit der Ereignisbeschreibung.
(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 ListProvider-Parameter gibt den Anbieter Microsoft-Windows-GroupPolicy an. Der Ausdruck wird in Klammern umschlossen und verwendet die Events-Eigenschaft zum Abrufen von Objekten. Die Objekte werden in der Pipeline an das Format-Table
Cmdlet gesendet. Format-Table
zeigt die ID und Beschreibung der Ereignisobjekte an.
Beispiel 9: Abrufen von Protokollinformationen aus Ereignisobjekteigenschaften
In diesem Beispiel wird gezeigt, wie Mithilfe von Ereignisobjekteigenschaften Informationen zum Inhalt eines Protokolls 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 LogName-Parameter, um das Windows PowerShell Ereignisprotokoll anzugeben. Die Ereignisobjekte werden in der $Event
Variablen gespeichert. Die Count-Eigenschaft von $Event
zeigt die Gesamtzahl der protokollierten Ereignisse an.
Die $Event
Variable wird an das Group-Object
Cmdlet gesendet. Group-Object
verwendet den Property-Parameter , um die Id-Eigenschaft anzugeben und die Objekte nach dem Wert der Ereignis-ID zu zählen. Der NoElement-Parameter entfernt andere Eigenschaften aus der Objektausgabe. Die gruppierten Objekte werden in der Pipeline an das Sort-Object
Cmdlet gesendet. Sort-Object
verwendet den Property-Parameter , um die Objekte nach Count zu sortieren. Der Absteigende Parameter 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 $Event
Variable wird an das Group-Object
Cmdlet gesendet. Group-Object
verwendet den Property-Parameter , um die LevelDisplayName-Eigenschaft anzugeben, und zählt die Objekte nach LevelDisplayName. Die Objekte sind nach den Ebenen wie Warnung und Information gruppiert.
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 den gruppierten LevelDisplayName.
Beispiel 10: Abrufen von Fehlerereignissen mit einer angegebenen Zeichenfolge im Namen
In diesem Beispiel wird eine durch Trennzeichen getrennte Zeichenfolge von Protokollnamen verwendet. Die Ausgabe wird nach der Ebene wie 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 Platzhalter (*
) zum Angeben der Protokollnamen. Die Objekte werden in der Pipeline an das Group-Object
Cmdlet gesendet. Group-Object
verwendet den Property-Parameter , um die Objekte nach LevelDisplayName und LogName zu gruppieren. Der NoElement-Parameter entfernt andere Eigenschaften aus der Ausgabe. Die gruppierten Objekte werden in der Pipeline an das Format-Table
Cmdlet gesendet. Format-Table
verwendet den AutoSize-Parameter , um die Spalten zu formatieren. Die Spalte Count enthält die Gesamtzahl der einzelnen Ereignisse. Die Spalte Name enthält die gruppierten LevelDisplayName und LogName.
Beispiel 11: 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 Path-Parameter gibt das Verzeichnis und den Dateinamen an.
Beispiel 12: Abrufen einer bestimmten Anzahl von Ereignissen aus einem archivierten Ereignisprotokoll
Mit diesen Befehlen wird eine bestimmte Anzahl von Ereignissen aus einem archivierten Ereignisprotokoll abgerufen. 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 Path-Parameter gibt das Verzeichnis und den Dateinamen an. Der MaxEvents-Parameter gibt an, dass 100 Datensätze angezeigt werden, von den neuesten bis zu den ältesten Datensätzen.
Beispiel 13: 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 Ereignisse gespeichert. Eine archivierte ETW-Datei wird als traceLog.etl.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 Path-Parameter gibt das Verzeichnis und den Dateinamen an. Der Oldest-Parameter wird verwendet, um Ereignisse in der Reihenfolge auszugeben, in der sie geschrieben werden, älteste bis neueste. Die Objekte werden in der Pipeline an das Sort-Object
Cmdlet Sort-Object
gesendet und sortiert die Objekte in absteigender Reihenfolge nach dem Wert der TimeCreated-Eigenschaft . Die Objekte werden in der Pipeline an das Select-Object
Cmdlet gesendet, das die 100 neuesten Ereignisse anzeigt.
Beispiel 14: Abrufen von Ereignissen aus einem Ereignisablaufverfolgungsprotokoll
In diesem Beispiel wird gezeigt, wie Die Ereignisse aus einer Ereignisablaufverfolgungsprotokolldatei (.etl
) und einer archivierten Windows PowerShell Protokolldatei () abgerufen werden..evtx
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. Für den Befehl ist der Älteste-Parameter erforderlich, da er aus einer .etl
Datei liest, aber der Älteste Parameter gilt 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 Path-Parameter verwendet eine durch Trennzeichen getrennte Liste, um jedes Dateiverzeichnis und den Dateinamen anzugeben. Der Oldest-Parameter wird verwendet, um Ereignisse in der Reihenfolge auszugeben, in der sie geschrieben werden, älteste bis neueste. Die Objekte werden in der Pipeline an das Where-Object
Cmdlet gesendet. Where-Object
verwendet einen Skriptblock, um Ereignisse mit und der ID403 zu finden. Die $_
Variable stellt das aktuelle Objekt in der Pipeline dar, und id ist die Event ID-Eigenschaft.
Beispiel 15: Filtern von Ereignisprotokollergebnissen
Dieses Beispiel zeigt eine Vielzahl von Methoden zum Filtern und Auswählen von Ereignissen aus einem Ereignisprotokoll. Alle diese Befehle rufen Ereignisse ab, 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
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 16: 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 FilterHashtable-Parameter finden Sie unter Erstellen 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 date-Objekt 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 wert, der in der $Date
Variablen gespeichert ist. Der Id-Schlüssel verwendet den Ereignis-ID-Wert 1003.
Beispiel 17: Verwenden von FilterHashtable zum Abrufen von Anwendungsfehlern
In diesem Beispiel wird der FilterHashtable-Parameter verwendet, um Internet Explorer Anwendungsfehler 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 date-Objekt 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, der die Quelle des Ereignisses ist. Der Datenschlüssel verwendet den Wert iexplore.exe Der StartTime-Schlüssel verwendet den in $StartTime
der Variablen gespeicherten Wert.
Beispiel 18: Verwenden von SuppressHashFilter zum Filtern von Anwendungsfehlern
Wie oben in Beispiel 16 wird in diesem Beispiel der FilterHashtable-Parameter verwendet, um Ereignisse aus dem Anwendungsprotokoll abzurufen. Wir fügen jedoch die SuppressHashFilter-Taste hinzu, um Ereignisse auf Informationsebene herauszufiltern.
$Date = (Get-Date).AddDays(-2)
$filter = @{
LogName='Application'
StartTime=$Date
SuppressHashFilter=@{Level=4}
}
Get-WinEvent -FilterHashtable $filter
Ruft in diesem Beispiel alle Ereignisse aus dem Anwendungsprotokoll der letzten zwei Tage ab, Get-WinEvent
mit Ausnahme der Ereignisse, die die Ebene 4 (Information) aufweisen.
Parameter
-ComputerName
Gibt den Namen des Computers an, der von diesem Cmdlet Ereignisse aus den Ereignisprotokollen abgerufen wird. 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 zuzulassen.
Dieses Cmdlet basiert nicht auf PowerShell-Remoting. Sie können den ComputerName-Parameter auch dann verwenden, wenn der Computer nicht für das Ausführen von Remotebefehlen konfiguriert ist.
Type: | String |
Aliases: | Cn |
Position: | Named |
Default value: | Local computer |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 Domain01\User01. Oder geben Sie ein PSCredential-Objekt ein, z. B. ein vom Get-Credential
Cmdlet generiertes Objekt. Wenn Sie einen Benutzernamen eingeben, werden Sie zur Eingabe eines Kennworts aufgefordert. Wenn Sie nur den Parameternamen eingeben, werden Sie zur Eingabe eines Benutzernamens und eines Kennworts aufgefordert.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilterHashtable
Gibt eine Abfrage im Hashtabellenformat an, um Ereignisse aus mindestens einem Ereignisprotokoll auszuwählen. Die Abfrage enthält eine Hashtabelle mit mindestens einem Schlüssel-Wert-Paar .
Hashtabellenabfragen haben die folgenden Regeln:
- Bei Schlüsseln und Werten wird die Groß-/Kleinschreibung nicht beachtet.
- Feldhalterzeichen 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 Path-Wert nimmt Pfade zu
.etl
,.evt
- und.evtx
Protokolldateien an. - Die Schlüssel LogName, Path und ProviderName können in derselben Abfrage verwendet werden.
- Der UserID-Schlüssel kann einen gültigen Sicherheitsbezeichner (SID) oder einen Domänenkontonamen verwenden, der zum Erstellen eines gültigen System.Security.Principal.NTAccount-Objekts verwendet werden kann.
- Der Datenwert nimmt Ereignisdaten in einem unbenannten Feld an. Beispielsweise Ereignisse in klassischen Ereignisprotokollen.
<named-data>
key stellt ein benanntes Ereignisdatenfeld dar.
Wenn Get-WinEvent
ein Schlüssel-Wert-Paar nicht interpretiert werden kann, interpretiert er den Schlüssel als Namen, bei dem die Groß-/Kleinschreibung für die Ereignisdaten im Ereignis beachtet wird.
Die gültigen Get-WinEvent
Schlüssel-Wert-Paare sind wie folgt:
- Logname=
<String[]>
- Providername=
<String[]>
- Pfad=
<String[]>
- Schlüsselwörter=
<Long[]>
- ID=
<Int32[]>
- Ebene=
<Int32[]>
- Starttime=
<DateTime>
- Endtime=
<DateTime>
- Userid=
<SID>
- Daten=
<String[]>
<named-data>
=<String[]>
- SuppressHashFilter=
<Hashtable>
Type: | Hashtable[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilterXml
Gibt eine strukturierte XML-Abfrage an, mit der dieses Cmdlet Ereignisse aus mindestens einem Ereignisprotokoll auswählt.
Verwenden Sie zum Generieren einer gültigen XML-Abfrage die Features benutzerdefinierte Ansicht und Filter Current Log in Windows Ereignisanzeige Create. 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 FilterXml-Parameters 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 unter Abfrageschema und im Abschnitt XML-Ereignisabfragen der Ereignisauswahl.
Sie können auch ein Suppress-Element mit dem FilterHashtable-Parameter erstellen.
Type: | XmlDocument |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilterXPath
Gibt eine XPath-Abfrage an, mit der dieses Cmdlet Ereignisse aus mindestens einem Protokoll auswählt.
Weitere Informationen zur XPath-Sprache finden Sie unter XPath-Referenz und im Abschnitt Auswahlfilter der Ereignisauswahl.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 Name-Parameters Platzhalterzeichen 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.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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 das Sternchen (*
) platzhalter.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | 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 Platzhalterzeichen Sternchen (*
).
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-LogName
Gibt die Ereignisprotokolle an, von denen dieses Cmdlet Ereignisse erhält. 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 übergeben.
Hinweis
PowerShell schränkt die Anzahl der Protokolle, die Sie anfordern können, nicht ein. Das Cmdlet fragt jedoch die Windows-API ab, Get-WinEvent
die einen Grenzwert von 256 aufweist. 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 }
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-MaxEvents
Gibt die maximale Anzahl zurückgegebener Ereignisse an. Geben Sie eine ganze Zahl ein, z. B. 100. Standardmäßig werden alle Ereignisse in den Protokollen oder Dateien zurückgegeben.
Type: | Int64 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Oldest
Geben Sie an, dass dieses Cmdlet die Ereignisse in ältester und erster Reihenfolge abruft. Standardmäßig werden zuerst die neuesten Ereignisse zurückgegeben.
Dieser Parameter ist erforderlich, um Ereignisse aus .etl
und .evt
Dateien sowie 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.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Gibt den Pfad zu den Ereignisprotokolldateien an, von denen dieses Cmdlet Ereignisse ruft. 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
. Sie können Ereignisse aus verschiedenen Dateien und Dateitypen in demselben Befehl einschließen.
Type: | String[] |
Aliases: | PSPath |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-ProviderName
Gibt als Zeichenfolgenarray die Ereignisprotokollanbieter an, von 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.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
Eingaben
System.String, System.Xml.XmlDocument, System.Collections.Hashtable
Sie können eine LogName (Zeichenfolge), eine FilterXML-Abfrage oder eine FilterHashtable-Abfrage an pipelineieren Get-WinEvent
.
Ausgaben
System.Diagnostics.Eventing.Reader.EventLogConfiguration, System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.Eventing.Reader.ProviderMetadata
Gibt mit dem ListLog-ParameterGet-WinEvent
System.Diagnostics.Eventing.Reader.EventLogConfiguration-Objekte zurück .
Gibt mit dem ListProvider-ParameterGet-WinEvent
System.Diagnostics.Eventing.Reader.ProviderMetadata-Objekte zurück.
Gibt mit allen anderen Parametern Get-WinEvent
System.Diagnostics.Eventing.Reader.EventLogRecord-Objekte zurück.
Hinweise
Get-WinEvent
wurde entwickelt, um das Get-EventLog
Cmdlet 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 Get-WinEvent
Cmdlets und Get-EventLog
werden in Windows Pre-Installation Environment (Windows PE) nicht unterstützt.