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-Object
Pobiera 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-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 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-Object
uż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) <= 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 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
.etl
plików ,.evt
i.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 .evt
nazw plików , .evtx
i .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
Do tego polecenia cmdlet możesz przekazać ciąg LogName (ciąg).
Do tego polecenia cmdlet można przekazać zapytanie FilterXML .
Do tego polecenia cmdlet można przekazać zapytanie FilterHashtable .
Dane wyjściowe
Za pomocą parametru ListLog to polecenie cmdlet zwraca obiekty EventLogConfiguration .
Domyślnie to polecenie cmdlet zwraca obiekty EventLogRecord .
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).