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 klawisze CTRL+C. Zdarzenia można pobierać z wybranych dzienników lub dzienników generowanych przez wybranych dostawców zdarzeń. Możesz również połączyć zdarzenia z wielu źródeł w jednym poleceniu. Get-WinEvent umożliwia filtrowanie zdarzeń przy użyciu zapytań XPath, zapytań ze strukturą XML i zapytań tabeli skrótów.

Jeśli nie korzystasz z programu PowerShell jako administrator, mogą zostać wyświetlone komunikaty o błędach, które nie mogą pobrać informacji o 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. Dzienniki klasyczne są pobierane najpierw, a następnie nowe dzienniki zdarzeń systemu Windows. Możliwe, ż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ń . Następnie obiekt służy 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 , aby określić dziennik zabezpieczeń . Obiekt jest zapisywany w zmiennej. Właściwość MaximumSizeInBytes jest ustawiona na 1 gigabajt w obiekcie. Metoda SaveChanges jest wywoływana, aby wypchnąć zmianę do systemu wewnątrz bloku próby w celu obsługi naruszeń dostępu. Polecenie Get-WinEvent cmdlet jest ponownie wywoływane w dzienniku zabezpieczeń i przesyłane potokami do Format-List polecenia cmdlet w celu sprawdzenia, 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. Możliwe jest, że rekord rekordu 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 funkcji do zwracania tylko dzienników zawierających dane. $_ to zmienna reprezentująca bieżący obiekt w potoku. RecordCount to właściwość 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-Object pobiera właściwości LogMode, MaximumSizeInBytes, RecordCount, LogName i używa wyrażenia obliczeniowego, aby wyświetlić wartość ComputerName przy użyciu zmiennej $Server . Obiekty są wysyłane w dół potoku do Format-Table polecenia cmdlet, aby wyświetlić dane wyjściowe w konsoli programu PowerShell. Parametr AutoSize formatuje dane wyjściowe, aby zmieściły się na ekranie.

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 to dostawca, a LogLinks to dziennik, do którego zapisuje dostawca.

Przykład 7. Pobieranie wszystkich dostawców dzienników zdarzeń zapisywanych 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 to właściwość obiektu i wyświetla dostawców, którzy zapisują w dzienniku aplikacji .

Przykład 8. Pobieranie nazw dostawców dziennika 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 identyfikatory zdarzeń generowane 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-Table wyś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 pogrupowane 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 Windows PowerShell dziennika zdarzeń. Obiekty zdarzeń są przechowywane w zmiennej $Event . Właściwość Count zawiera $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 zgrupowane 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 ich 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 dziennika. 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 pogrupowany element LevelDisplayName i LogName.

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

Get-WinEvent 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 ma 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 generowania zdarzeń w kolejności ich zapisywania, najstarszego do najnowszego. 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 zarchiwizowanego pliku dziennika 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 Path używa listy rozdzielanej przecinkami, aby określić każdy katalog plików i nazwę pliku. Najstarszy parametr służy do generowania zdarzeń w kolejności ich zapisywania, najstarszego do najnowszego. Obiekty są wysyłane w dół potoku Where-Object do polecenia cmdlet. Where-Object używa bloku skryptu do znajdowania zdarzeń o identyfikatorze403. 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ń Windows PowerShell. Metody filtrowania są bardziej wydajne niż użycie Where-Object polecenia cmdlet. Filtry są stosowane w miarę 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) <= 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

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

W tym przykładzie użyto parametru FilterHashtable do pobierania zdarzeń z dziennika aplikacji . Tabela skrótów używa par klucz/wartość . Aby uzyskać więcej informacji na temat parametru FilterHashtable , zobacz 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ść dziennika aplikacji . Klucz StartTime używa wartości przechowywanej w zmiennej $Date . Klucz identyfikatora używa wartości identyfikatora zdarzenia 1003.

Przykład 18. Używanie funkcji FilterHashtable w celu uzyskania błędów aplikacji

W tym przykładzie użyto parametru FilterHashtable do 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ę z siedmiu 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ść dziennika aplikacji . Klucz ProviderName używa wartości Błąd aplikacji, który 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. Użyj elementu SuppressHashFilter, aby filtrować błędy aplikacji

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 przez ostatnie dwa 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.

Type:String
Aliases:Cn
Position:Named
Default value:Local computer
Accept pipeline input:False
Accept wildcard characters: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.

Type:PSCredential
Position:Named
Default value:Current user
Accept pipeline input:False
Accept wildcard characters: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 dotyczące 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 przyjmuje ś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 przyjmuje dane zdarzenia w polu bez nazwy. Na przykład zdarzenia w klasycznych dziennikach zdarzeń.
  • <named-data> klucz 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[]>
  • Providername=<String[]>
  • Ścieżka=<String[]>
  • Słowa kluczowe=<Long[]>
  • IDENTYFIKATOR=<Int32[]>
  • Poziom=<Int32[]>
  • Starttime=<DateTime>
  • Endtime=<DateTime>
  • Userid=<SID>
  • Danych=<String[]>
  • <named-data>=<String[]>
  • SuppressHashFilter=<Hashtable>
Type:Hashtable[]
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 funkcji Utwórz widok niestandardowy i Filtruj bieżący dziennik 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 Queries (Zapytania dotyczące zdarzeń XML) w sekcji Event Selection (Zapytania dotyczące zdarzeń XML).

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

Type:XmlDocument
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 (Dokumentacja XPath ) i sekcję Selection Filters (Filtry wyboru zdarzeń).

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-ListLog

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

Type:String[]
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters: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 (*).

Type:String[]
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters: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. Możesz również potokować nazwy dzienników Get-WinEvent do polecenia cmdlet.

Uwaga

Program PowerShell nie ogranicza ilości dzienników, które 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ść za pomocą foreach pętli, aby wykonać iterację po każdym dzienniku w następujący sposób: Get-WinEvent -ListLog * | ForEach-Object{ Get-WinEvent -LogName $_.Logname }

Type:String[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters: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.

Type:Int64
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-Oldest

Wskaż, że to polecenie cmdlet pobiera zdarzenia w najstarszej kolejności. 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 najstarszej kolejności, a zdarzenia mogą być zwracane tylko w najstarszej kolejności.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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.

Type:String[]
Aliases:PSPath
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters: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.

Type:String[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:True

Dane wejściowe

String

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

XmlDocument

Możesz przekazać zapytanie FilterXML do tego polecenia cmdlet.

Hashtable

Możesz przekazać do tego polecenia cmdlet zapytanie FilterHashtable .

Dane wyjściowe

EventLogConfiguration

Przy użyciu parametru ListLog to polecenie cmdlet zwraca obiekty EventLogConfiguration .

EventLogRecord

Domyślnie to polecenie cmdlet zwraca obiekty EventLogRecord .

ProviderMetadata

Przy użyciu parametru ListProvider to polecenie cmdlet zwraca obiekty ProviderMetadata .

Uwagi

Get-WinEvent 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 zachowywana w celu zapewnienia zgodności z poprzednimi wersjami.

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