Udostępnij za pośrednictwem


Get-WinEvent

Pobiera zdarzenia z dzienników zdarzeń i plików dziennika śledzenia zdarzeń na komputerach lokalnych i zdalnych.

Składnia

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>]

Opis

To polecenie cmdlet jest dostępne tylko na platformie Windows.

Polecenie Get-WinEvent cmdlet pobiera zdarzenia z dzienników zdarzeń, w tym dzienniki klasyczne, takie jak dzienniki systemu i aplikacji . Polecenie cmdlet pobiera dane z dzienników zdarzeń generowanych przez technologię dziennika zdarzeń systemu Windows wprowadzoną w systemie Windows Vista i zdarzenia w plikach dziennika generowanych przez śledzenie zdarzeń dla systemu Windows (ETW). Domyślnie Get-WinEvent zwraca informacje o zdarzeniach w kolejności od najnowszych do najstarszych.

Get-WinEvent Wyświetla listę dzienników zdarzeń i dostawców dzienników zdarzeń. Aby przerwać polecenie, naciśnij CTRL+C. Zdarzenia można pobierać z wybranych dzienników lub z dzienników generowanych przez wybranych dostawców zdarzeń. Można również połączyć zdarzenia z wielu źródeł w jednym poleceniu. Get-WinEvent Umożliwia filtrowanie zdarzeń przy użyciu zapytań XPath, zapytań strukturalnych XML i zapytań tabeli skrótów.

Jeśli nie używasz programu PowerShell jako administrator, mogą zostać wyświetlone komunikaty o błędach, których nie można pobrać w dzienniku.

Przykłady

Przykład 1. Pobieranie wszystkich dzienników z komputera lokalnego

To polecenie pobiera wszystkie dzienniki zdarzeń na komputerze lokalnym. Dzienniki są wyświetlane w kolejności ich Get-WinEvent pobierania. Najpierw pobierane są dzienniki klasyczne, a następnie nowe dzienniki zdarzeń systemu Windows. Istnieje możliwość, że rekord rekordu dziennika ma wartość null, która jest pusta lub zero.

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

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr ListLog używa symbolu wieloznakowego gwiazdki (*), aby wyświetlić informacje o każdym dzienniku.

Przykład 2. Pobieranie klasycznego dziennika instalacji

To polecenie pobiera obiekt EventLogConfiguration reprezentujący klasyczny dziennik instalacji . Obiekt zawiera informacje o dzienniku, takie jak rozmiar pliku, dostawca, ścieżka pliku i czy dziennik jest włączony.

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            :

Polecenie Get-WinEvent cmdlet używa parametru ListLog do określenia dziennika instalacji . Obiekt jest wysyłany w dół potoku Format-List do polecenia cmdlet. Format-List używa parametru Property z symbolem wieloznacznymi gwiazdki (*), aby wyświetlić każdą właściwość.

Przykład 3. Konfigurowanie klasycznego dziennika zabezpieczeń

To polecenie pobiera obiekt EventLogConfiguration reprezentujący klasyczny dziennik zabezpieczeń . Obiekt jest następnie używany do konfigurowania ustawień dziennika, takich jak maksymalny rozmiar pliku, ścieżka pliku i czy dziennik jest włączony.

$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            :

Polecenie Get-WinEvent cmdlet używa parametru ListLog do określenia dziennika zabezpieczeń . Obiekt jest zapisywany w zmiennej. Właściwość MaximumSizeInBytes jest ustawiona na 1 gigabajt obiektu. Metoda SaveChanges jest wywoływana w celu wypchnięcia zmiany do systemu wewnątrz bloku próby w celu obsługi naruszeń dostępu. Polecenie Get-WinEvent cmdlet jest wywoływane ponownie w dzienniku zabezpieczeń i przesyłane potokami do Format-List polecenia cmdlet, aby sprawdzić, czy właściwość MaximumSizeInBytes została zapisana na maszynie.

Przykład 4. Pobieranie dzienników zdarzeń z serwera

To polecenie pobiera tylko dzienniki zdarzeń na komputerze lokalnym, który zawiera zdarzenia. Istnieje możliwość, że rekord dziennika ma wartość null lub zero. W przykładzie użyto zmiennej $_ . Aby uzyskać więcej informacji, zobacz 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

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr ListLog używa symbolu wieloznakowego gwiazdki (*), aby wyświetlić informacje o każdym dzienniku. Parametr ComputerName określa, aby pobrać dzienniki z komputera lokalnego, localhost. Obiekty są wysyłane w dół potoku Where-Object do polecenia cmdlet. Where-Object używa $_.RecordCount metody do zwracania tylko dzienników zawierających dane. $_ jest zmienną reprezentującą bieżący obiekt w potoku. RecordCount jest właściwością obiektu o wartości innej niż null.

Przykład 5. Pobieranie dzienników zdarzeń z wielu serwerów

Ten przykład pobiera obiekty reprezentujące dzienniki zdarzeń aplikacji na trzech komputerach: Server01, Server02 i Server03. Słowo kluczowe ForEach jest używane, ponieważ parametr ComputerName akceptuje tylko jedną wartość. Aby uzyskać więcej informacji, zobacz 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

Zmienna $S przechowuje nazwy trzech serwerów: Server01, Server02 i Server03. Instrukcja ForEach używa pętli do przetwarzania każdego serwera. ($Server in $S) Blok skryptu w nawiasach klamrowych ({ }) uruchamia Get-WinEvent polecenie . Parametr ListLog określa dziennik aplikacji . Parametr ComputerName używa zmiennej $Server do pobierania informacji dziennika z każdego serwera.

Obiekty są wysyłane w dół potoku Select-Object do polecenia cmdlet. Select-ObjectPobiera właściwości LogMode, MaximumSizeInBytes, RecordCount, LogName i używa wyrażenia obliczeniowego w celu wyświetlenia wartości ComputerName przy użyciu zmiennej $Server . Obiekty są wysyłane w dół potoku Format-Table do polecenia cmdlet w celu wyświetlenia danych wyjściowych w konsoli programu PowerShell. Parametr AutoSize formatuje dane wyjściowe tak, aby pasowały do ekranu.

Przykład 6. Pobieranie dostawców dzienników zdarzeń i nazw dzienników

To polecenie pobiera dostawców dziennika zdarzeń i dzienniki, do których zapisują.

Get-WinEvent -ListProvider *

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

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

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr ListProvider używa symbolu wieloznakowego gwiazdki (*), aby wyświetlić informacje o każdym dostawcy. W danych wyjściowych nazwa jest dostawcą, a LogLinks jest dziennikiem zapisywany przez dostawcę.

Przykład 7. Pobieranie wszystkich dostawców dziennika zdarzeń, którzy zapisują w określonym dzienniku

To polecenie pobiera wszystkich dostawców, którzy zapisują w dzienniku aplikacji .

(Get-WinEvent -ListLog Application).ProviderNames

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

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr ListLog używa aplikacji do pobierania obiektów dla tego dziennika. ProviderNames jest właściwością obiektu i wyświetla dostawców, którzy zapisują w dzienniku aplikacji .

Przykład 8. Pobieranie nazw dostawców dzienników zdarzeń zawierających określony ciąg

To polecenie pobiera dostawców dziennika zdarzeń z nazwami, które zawierają określony ciąg w nazwie dostawcy.

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    : {}

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr ListProvider używa symbolu wieloznakowego gwiazdki (*), aby znaleźć zasady w dowolnym miejscu w nazwie dostawcy.

Przykład 9. Pobieranie identyfikatorów zdarzeń generowanych przez dostawcę zdarzeń

To polecenie wyświetla listę identyfikatorów zdarzeń generowanych przez dostawcę zdarzeń Microsoft-Windows-GroupPolicy wraz z opisem zdarzenia.

(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.

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr ListProvider określa dostawcę Microsoft-Windows-GroupPolicy. Wyrażenie jest opakowane w nawiasy i używa właściwości Events do pobierania obiektów. Obiekty są wysyłane w dół potoku Format-Table do polecenia cmdlet. Format-Tablewyświetla identyfikator i opis obiektów zdarzeń.

Przykład 10. Pobieranie informacji dziennika z właściwości obiektu zdarzenia

W tym przykładzie pokazano, jak uzyskać informacje o zawartości dziennika przy użyciu właściwości obiektu zdarzenia. Obiekty zdarzeń są przechowywane w zmiennej, a następnie grupowane i liczone według identyfikatora zdarzenia i poziomu.

$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

Polecenie Get-WinEvent cmdlet używa parametru LogName do określenia dziennika zdarzeń programu Windows PowerShell . Obiekty zdarzeń są przechowywane w zmiennej $Event . Właściwość Count pokazuje $Eventłączną liczbę zarejestrowanych zdarzeń.

Zmienna $Event jest wysyłana w dół potoku Group-Object do polecenia cmdlet. Group-Object używa parametru Property , aby określić właściwość Id i zlicza obiekty według wartości identyfikatora zdarzenia. Parametr NoElement usuwa inne właściwości z danych wyjściowych obiektów. Pogrupowane obiekty są wysyłane w dół potoku Sort-Object do polecenia cmdlet. Sort-Object używa parametru Property do sortowania obiektów według liczby. Parametr Malejąco wyświetla dane wyjściowe według liczby, od najwyższego do najniższego. W danych wyjściowych kolumna Count (Liczba ) zawiera łączną liczbę każdego zdarzenia. Kolumna Name zawiera pogrupowane numery identyfikatorów zdarzeń.

Zmienna $Event jest wysyłana w dół potoku Group-Object do polecenia cmdlet. Group-Object Używa parametru Property , aby określić właściwość LevelDisplayName i zlicza obiekty według LevelDisplayName. Obiekty są pogrupowane według poziomów, takich jak Ostrzeżenie i Informacje. Parametr NoElement usuwa inne właściwości z danych wyjściowych. W danych wyjściowych kolumna Count (Liczba ) zawiera łączną liczbę każdego zdarzenia. Kolumna Name zawiera pogrupowany element LevelDisplayName.

Przykład 11: Uzyskiwanie zdarzeń błędów, które mają określony ciąg w nazwie

W tym przykładzie użyto ciągu rozdzielanego przecinkami nazw dzienników. Dane wyjściowe są pogrupowane według poziomu, takiego jak błąd lub ostrzeżenie i nazwa dziennika.

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

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr LogName używa ciągu rozdzielanego przecinkami z symbolem wieloznacznymi gwiazdki (*), aby określić nazwy dzienników. Obiekty są wysyłane w dół potoku Group-Object do polecenia cmdlet. Group-Object używa parametru Property do grupowania obiektów według LevelDisplayName i LogName. Parametr NoElement usuwa inne właściwości z danych wyjściowych. Pogrupowane obiekty są wysyłane w dół potoku Format-Table do polecenia cmdlet. Format-Table używa parametru AutoSize do formatowania kolumn. Kolumna Count (Liczba ) zawiera łączną liczbę każdego zdarzenia. Kolumna Name zawiera zgrupowane parametry LevelDisplayName i LogName.

Przykład 12. Pobieranie zdarzeń z zarchiwizowanego dziennika zdarzeń

Get-WinEvent program może pobierać informacje o zdarzeniach z zapisanych plików dziennika. W tym przykładzie użyto zarchiwizowanego dziennika programu PowerShell przechowywanego na komputerze lokalnym.

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...

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr Path określa katalog i nazwę pliku.

Przykład 13: Pobieranie określonej liczby zdarzeń z zarchiwizowanego dziennika zdarzeń

Te polecenia pobierają określoną liczbę zdarzeń z zarchiwizowanego dziennika zdarzeń. Get-WinEvent zawiera parametry, które mogą uzyskać maksymalną liczbę zdarzeń lub najstarszych zdarzeń. W tym przykładzie użyto zarchiwizowanego dziennika programu PowerShell przechowywanego w folderze C:\Test\PowerShellCore Operational.evtx.

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

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z komputera. Parametr Path określa katalog i nazwę pliku. Parametr MaxEvents określa, że są wyświetlane 100 rekordów od najnowszych do najstarszych.

Przykład 14: Śledzenie zdarzeń dla systemu Windows

Śledzenie zdarzeń dla systemu Windows (ETW) zapisuje zdarzenia w dzienniku w miarę występowania zdarzeń. Zdarzenia są przechowywane w kolejności od najstarszych do najnowszych. Zarchiwizowany plik ETW jest zapisywany jako taki .etl jak TraceLog.etl. Zdarzenia są wymienione w kolejności, w której są zapisywane w dzienniku, więc wymagany jest najstarszy parametr.

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

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z zarchiwizowanego pliku. Parametr Path określa katalog i nazwę pliku. Najstarszy parametr służy do wyprowadzania zdarzeń w kolejności, w której są zapisywane, od najstarszych do najnowszych. Obiekty są wysyłane w dół potoku do Sort-Object polecenia cmdlet Sort-Object sortuje obiekty w kolejności malejącej według wartości właściwości TimeCreated . Obiekty są wysyłane w dół potoku Select-Object do polecenia cmdlet, które wyświetla 100 najnowszych zdarzeń.

Przykład 15. Pobieranie zdarzeń z dziennika śledzenia zdarzeń

W tym przykładzie pokazano, jak pobrać zdarzenia z pliku dziennika śledzenia zdarzeń (.etl) i zarchiwizowany plik dziennika programu Windows PowerShell (.evtx). Można połączyć wiele typów plików w jednym poleceniu. Ponieważ pliki zawierają ten sam typ obiektu .NET Framework , EventLogRecord, można je filtrować przy użyciu tych samych właściwości. Polecenie wymaga najstarszego parametru, ponieważ odczytuje go z .etl pliku, ale najstarszy parametr ma zastosowanie do każdego pliku.

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

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika z zarchiwizowanych plików. Parametr Ścieżka używa listy rozdzielanej przecinkami, aby określić każdy katalog plików i nazwę pliku. Najstarszy parametr służy do wyprowadzania zdarzeń w kolejności, w której są zapisywane, od najstarszych do najnowszych. Obiekty są wysyłane w dół potoku Where-Object do polecenia cmdlet. Where-Objectużywa bloku skryptu do znajdowania zdarzeń o identyfikatorze 403. Zmienna $_ reprezentuje bieżący obiekt w potoku, a Identyfikator jest właściwością Identyfikator zdarzenia.

Przykład 16. Filtrowanie wyników dziennika zdarzeń

W tym przykładzie przedstawiono różne metody filtrowania i wybierania zdarzeń z dziennika zdarzeń. Wszystkie te polecenia pobierają zdarzenia, które wystąpiły w ciągu ostatnich 24 godzin z dziennika zdarzeń programu Windows PowerShell . Metody filtrowania są bardziej wydajne niż użycie Where-Object polecenia cmdlet . Filtry są stosowane podczas pobierania obiektów. Where-Object pobiera wszystkie obiekty, a następnie stosuje filtry do wszystkich obiektów.

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

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

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

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

Przykład 17: Używanie funkcji FilterHashtable do pobierania zdarzeń z dziennika aplikacji

W tym przykładzie użyto parametru FilterHashtable w celu pobrania zdarzeń z dziennika aplikacji . Tabela skrótów używa par klucz/wartość . Aby uzyskać więcej informacji na temat parametru FilterHashtable , zobacz Creating Get-WinEvent queries with FilterHashtable (Tworzenie zapytań Get-WinEvent za pomocą funkcji FilterHashtable). Aby uzyskać więcej informacji na temat tabel skrótów, zobacz about_Hash_Tables.

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

Polecenie Get-Date cmdlet używa metody AddDays , aby uzyskać datę, która przypada dwa dni przed bieżącą datą. Obiekt date jest przechowywany w zmiennej $Date .

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika. Parametr FilterHashtable służy do filtrowania danych wyjściowych. Klucz LogName określa wartość jako dziennik aplikacji . Klucz StartTime używa wartości przechowywanej w zmiennej$Date. Klucz identyfikatora używa wartości identyfikatora zdarzenia 1003.

Przykład 18: Uzyskiwanie błędów aplikacji przy użyciu funkcji FilterHashtable

W tym przykładzie użyto parametru FilterHashtable w celu znalezienia błędów aplikacji programu Internet Explorer, które wystąpiły w ciągu ostatniego tygodnia.

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

Polecenie Get-Date cmdlet używa metody AddDays , aby uzyskać datę, która wynosi siedem dni przed bieżącą datą. Obiekt date jest przechowywany w zmiennej $StartTime .

Polecenie Get-WinEvent cmdlet pobiera informacje dziennika. Parametr FilterHashtable służy do filtrowania danych wyjściowych. Klucz LogName określa wartość jako dziennik aplikacji . Klucz ProviderName używa wartości Application Error, która jest źródłem zdarzenia. Klucz danych używa wartości iexplore.exe klucz StartTime używa wartości przechowywanej w $StartTime zmiennej.

Przykład 19: Filtrowanie błędów aplikacji za pomocą elementu SuppressHashFilter

Podobnie jak w przykładzie 16 powyżej, w tym przykładzie użyto parametru FilterHashtable w celu pobrania zdarzeń z dziennika aplikacji. Dodamy jednak klucz SuppressHashFilter , aby odfiltrować zdarzenia na poziomie informacji .

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

W tym przykładzie pobiera wszystkie zdarzenia z dziennika aplikacji w ciągu ostatnich dwóch dni, z wyjątkiem tych, Get-WinEvent które mają poziom 4 (informacje).

Parametry

-ComputerName

Określa nazwę komputera, na który to polecenie cmdlet pobiera zdarzenia z dzienników zdarzeń. Wpisz nazwę NetBIOS, adres IP lub w pełni kwalifikowaną nazwę domeny (FQDN) komputera. Wartość domyślna to komputer lokalny, localhost. Ten parametr akceptuje tylko jedną nazwę komputera jednocześnie.

Aby uzyskać dzienniki zdarzeń z komputerów zdalnych, skonfiguruj port zapory dla usługi dziennika zdarzeń, aby zezwolić na dostęp zdalny.

To polecenie cmdlet nie polega na komunikacji zdalnej programu PowerShell. Można użyć parametru ComputerName , nawet jeśli komputer nie jest skonfigurowany do uruchamiania poleceń zdalnych.

Typ:String
Aliasy:Cn
Position:Named
Domyślna wartość:Local computer
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Credential

Określa konto użytkownika, które ma uprawnienia do wykonania tej akcji. Wartość domyślna to bieżący użytkownik.

Wpisz nazwę użytkownika, taką jak User01 lub Domain01\User01. Możesz też wprowadzić obiekt PSCredential , taki jak obiekt wygenerowany przez Get-Credential polecenie cmdlet. Jeśli wpiszesz nazwę użytkownika, zostanie wyświetlony monit o podanie hasła. Jeśli wpiszesz tylko nazwę parametru, zostanie wyświetlony monit o podanie nazwy użytkownika i hasła.

Typ:PSCredential
Position:Named
Domyślna wartość:Current user
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-FilterHashtable

Określa zapytanie w formacie tabeli skrótów, aby wybrać zdarzenia z co najmniej jednego dziennika zdarzeń. Zapytanie zawiera tabelę skrótów z co najmniej jedną parą klucz/wartość .

Zapytania tabeli skrótów mają następujące reguły:

  • Klucze i wartości są bez uwzględniania wielkości liter.
  • Symbole wieloznaczne są prawidłowe tylko w wartościach skojarzonych z kluczami LogName i ProviderName .
  • Każdy klucz może być wymieniony tylko raz w każdej tabeli skrótów.
  • Wartość Ścieżka pobiera ścieżki do .etlplików , .evti .evtx dziennika.
  • Klucze LogName, Path i ProviderName mogą być używane w tym samym zapytaniu.
  • Klucz UserID może przyjmować prawidłowy identyfikator zabezpieczeń (SID) lub nazwę konta domeny, która może służyć do konstruowania prawidłowego obiektu System.Security.Principal.NTAccount.
  • Wartość Dane pobiera dane zdarzenia w polu bez nazwy. Na przykład zdarzenia w klasycznych dziennikach zdarzeń.
  • <named-data> key reprezentuje nazwane pole danych zdarzenia.

Jeśli Get-WinEvent nie można zinterpretować pary klucz/wartość , interpretuje klucz jako nazwę z uwzględnieniem wielkości liter dla danych zdarzenia w zdarzeniu.

Prawidłowe Get-WinEvent pary klucz/wartość są następujące:

  • LogName=<String[]>
  • Nazwa dostawcy=<String[]>
  • Ścieżka=<String[]>
  • Słowa kluczowe=<Long[]>
  • Identyfikator=<Int32[]>
  • Poziom=<Int32[]>
  • Godzina rozpoczęcia=<DateTime>
  • Godzina zakończenia=<DateTime>
  • UserID=<SID>
  • Data=<String[]>
  • <named-data>=<String[]>
  • SuppressHashFilter=<Hashtable>
Typ:Hashtable[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-FilterXml

Określa ustrukturyzowane zapytanie XML, które to polecenie cmdlet wybiera zdarzenia z co najmniej jednego dziennika zdarzeń.

Aby wygenerować prawidłowe zapytanie XML, użyj opcji Utwórz widok niestandardowy i filtruj bieżące funkcje dziennika w systemie Windows Podgląd zdarzeń. Użyj elementów w oknie dialogowym, aby utworzyć zapytanie, a następnie kliknij kartę XML, aby wyświetlić zapytanie w formacie XML. Kod XML można skopiować z karty XML do wartości parametru FilterXml . Aby uzyskać więcej informacji na temat funkcji Podgląd zdarzeń, zobacz Podgląd zdarzeń Pomoc.

Użyj zapytania XML, aby utworzyć złożone zapytanie zawierające kilka instrukcji XPath. Format XML umożliwia również użycie elementu Suppress XML , który wyklucza zdarzenia z zapytania. Aby uzyskać więcej informacji na temat schematu XML dla zapytań dziennika zdarzeń, zobacz sekcję Query Schema and the XML Event Query (Zapytania dotyczące zdarzeń XML) w sekcji Wybieranie zdarzeń.

Możesz również utworzyć element Suppress przy użyciu parametru FilterHashtable .

Typ:XmlDocument
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-FilterXPath

Określa zapytanie XPath, które to polecenie cmdlet wybiera zdarzenia z co najmniej jednego dziennika.

Aby uzyskać więcej informacji na temat języka XPath, zobacz XPath Reference and the Selection Filters (Odwołania XPath) i sekcję Selection Filters (Filtry wyboru zdarzeń).

Typ:String
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Force

Pobiera dzienniki debugowania i analityczne oprócz innych dzienników zdarzeń. Parametr Force jest wymagany do pobrania dziennika debugowania lub analitycznego, gdy wartość parametru name zawiera symbole wieloznaczne.

Domyślnie polecenie Get-WinEvent cmdlet wyklucza te dzienniki, chyba że określisz pełną nazwę dziennika debugowania lub analitycznego.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-ListLog

Określa dzienniki zdarzeń. Wprowadź nazwy dzienników zdarzeń na liście rozdzielanej przecinkami. Dozwolone są symbole wieloznaczne. Aby pobrać wszystkie dzienniki, użyj symbolu wieloznakowego gwiazdki (*).

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:True

-ListProvider

Określa dostawców dziennika zdarzeń pobieranych przez to polecenie cmdlet. Dostawca dziennika zdarzeń to program lub usługa, która zapisuje zdarzenia w dzienniku zdarzeń.

Wprowadź nazwy dostawców na liście rozdzielanej przecinkami. Dozwolone są symbole wieloznaczne. Aby uzyskać dostawców wszystkich dzienników zdarzeń na komputerze, użyj symbolu wieloznakowego gwiazdki (*).

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:True

-LogName

Określa dzienniki zdarzeń, z których to polecenie cmdlet pobiera zdarzenia. Wprowadź nazwy dzienników zdarzeń na liście rozdzielanej przecinkami. Dozwolone są symbole wieloznaczne. Nazwy dzienników można również przekazać potokowi Get-WinEvent do polecenia cmdlet .

Uwaga

Program PowerShell nie ogranicza ilości dzienników, których można zażądać. Jednak Get-WinEvent polecenie cmdlet wysyła zapytanie do interfejsu API systemu Windows, który ma limit 256. Może to utrudnić filtrowanie wszystkich dzienników jednocześnie. Można to obejść, używając foreach pętli do iterowania poszczególnych dzienników w następujący sposób: Get-WinEvent -ListLog * | ForEach-Object{ Get-WinEvent -LogName $_.Logname }

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

-MaxEvents

Określa maksymalną liczbę zwracanych zdarzeń. Wprowadź liczbę całkowitą, taką jak 100. Wartość domyślna to zwracanie wszystkich zdarzeń w dziennikach lub plikach.

Typ:Int64
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Oldest

Wskaż, że to polecenie cmdlet pobiera zdarzenia w kolejności najstarszej pierwszej. Domyślnie zdarzenia są zwracane w najnowszej kolejności.

Ten parametr jest wymagany do pobierania zdarzeń z .etl plików i .evt oraz z dzienników debugowania i analizy. W tych plikach zdarzenia są rejestrowane w kolejności najstarszej pierwszej, a zdarzenia mogą być zwracane tylko w kolejności najstarszej pierwszej.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Path

Określa ścieżkę do plików dziennika zdarzeń, z których to polecenie cmdlet pobiera zdarzenia. Wprowadź ścieżki do plików dziennika na liście rozdzielanej przecinkami lub użyj symboli wieloznacznych, aby utworzyć wzorce ścieżek plików.

Get-WinEvent program obsługuje pliki z rozszerzeniami .evtnazw plików , .evtxi .etl . Zdarzenia z różnych plików i typów plików można uwzględnić w tym samym poleceniu.

Typ:String[]
Aliasy:PSPath
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

-ProviderName

Określa jako tablicę ciągów dostawców dziennika zdarzeń, z których to polecenie cmdlet pobiera zdarzenia. Wprowadź nazwy dostawców na liście rozdzielanej przecinkami lub użyj symboli wieloznacznych, aby utworzyć wzorce nazw dostawcy.

Dostawca dziennika zdarzeń to program lub usługa, która zapisuje zdarzenia w dzienniku zdarzeń. Nie jest to dostawca programu PowerShell.

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

Dane wejściowe

String

Do tego polecenia cmdlet możesz przekazać ciąg LogName (ciąg).

XmlDocument

Do tego polecenia cmdlet można przekazać zapytanie FilterXML .

Hashtable

Do tego polecenia cmdlet można przekazać zapytanie FilterHashtable .

Dane wyjściowe

EventLogConfiguration

Za pomocą parametru ListLog to polecenie cmdlet zwraca obiekty EventLogConfiguration .

EventLogRecord

Domyślnie to polecenie cmdlet zwraca obiekty EventLogRecord .

ProviderMetadata

Za pomocą parametru ListProvider to polecenie cmdlet zwraca obiekty ProviderMetadata .

Uwagi

Get-WinEvent program jest przeznaczony do zastępowania Get-EventLog polecenia cmdlet na komputerach z systemem Windows Vista i nowszymi wersjami systemu Windows. Get-EventLog pobiera zdarzenia tylko w klasycznych dziennikach zdarzeń. Get-EventLog jest zachowywany w celu zachowania zgodności z poprzednimi wersjami.

Polecenia Get-WinEvent cmdlet i Get-EventLog nie są obsługiwane w środowisku przed instalacją systemu Windows (Windows PE).