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 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 $Eventzeigt 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-WinEventSchlü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 .evtDateinamenerweiterungen , .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-WinEventSystem.Diagnostics.Eventing.Reader.EventLogConfiguration-Objekte zurück .

Gibt mit dem ListProvider-ParameterGet-WinEventSystem.Diagnostics.Eventing.Reader.ProviderMetadata-Objekte zurück.

Gibt mit allen anderen Parametern Get-WinEventSystem.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.