Vytváření dotazů Get-WinEvent pomocí parametru FilterHashtable
Tato ukázka platí jenom pro platformy Windows.
Pokud si chcete přečíst původní blogový příspěvek 3. června 2014 Scripting Guy , přečtěte si téma Použití FilterHashTable k filtrování protokolu událostí pomocí PowerShellu.
Tento článek je výňatek původního blogového příspěvku a vysvětluje, jak pomocí Get-WinEvent
parametru FilterHashtable rutiny filtrovat protokoly událostí. Rutina PowerShellu Get-WinEvent
je výkonná metoda filtrování událostí a diagnostických protokolů Windows. Výkon se zlepší, když Get-WinEvent
dotaz použije parametr FilterHashtable .
Při práci s velkými protokoly událostí není efektivní odesílat objekty z kanálu do Where-Object
příkazu. Před PowerShellem 6 byla rutina Get-EventLog
další možností získání dat protokolu. Například následující příkazy jsou neefektivní k filtrování protokolů Microsoft-Windows-Defrag :
Get-EventLog -LogName Application | Where-Object Source -Match defrag
Get-WinEvent -LogName Application | Where-Object { $_.ProviderName -Match 'defrag' }
Následující příkaz používá tabulku hash, která zlepšuje výkon:
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='*defrag'
}
Blogové příspěvky o výčtu
Tento článek obsahuje informace o tom, jak používat výčtové hodnoty v tabulce hash. Další informace o výčtu najdete v těchto blogových příspěvcích o Scripting Guy . Chcete-li vytvořit funkci, která vrací výčtové hodnoty, viz výčty a hodnoty. Další informace naleznete v sérii Skripting Guy série blogových příspěvků o výčtu.
Páry klíč-hodnota v tabulce hash
Pokud chcete vytvářet efektivní dotazy, použijte rutinu Get-WinEvent
s parametrem FilterHashtable .
FilterHashtable přijímá tabulku hash jako filtr pro získání konkrétních informací z protokolů událostí Windows. Tabulka hash používá páry klíč-hodnota . Další informace o tabulkách hash najdete v tématu about_Hash_Tables.
Pokud jsou páry klíč-hodnota na stejném řádku, musí být oddělené středníkem. Pokud je každý pár klíč-hodnota na samostatném řádku, středník není potřeba. Tento článek například umístí páry klíč-hodnota na samostatné řádky a nepoužívá středníky.
Tato ukázka používá několik dvojic klíč-hodnota parametru FilterHashtable. Dokončený dotaz zahrnuje LogName, ProviderName, Keywords, ID a Level.
Přijaté páry klíč-hodnota jsou uvedeny v následující tabulce a jsou zahrnuty v dokumentaci pro Get-WinEvent FilterHashtable parametr.
Následující tabulka zobrazuje názvy klíčů, datové typy a informace o tom, jestli jsou pro datovou hodnotu přijímány zástupné znaky.
Název klíče | Datový typ Hodnoty | Přijímá zástupné znaky? |
---|---|---|
LogName | <String[]> |
Ano |
ProviderName | <String[]> |
Ano |
Cesta | <String[]> |
No |
Klíčová slova | <Long[]> |
No |
ID | <Int32[]> |
No |
Level | <Int32[]> |
No |
Počáteční čas | <DateTime> |
No |
EndTime | <DateTime> |
No |
UserID | <SID> |
No |
Data | <String[]> |
No |
<named-data> |
<String[]> |
Ne |
Klíč <named-data>
představuje pojmenované datové pole události. Například událost Perflib 1008 může obsahovat následující data událostí:
<EventData>
<Data Name="Service">BITS</Data>
<Data Name="Library">C:\Windows\System32\bitsperf.dll</Data>
<Data Name="Win32Error">2</Data>
</EventData>
K dotazování na tyto události můžete použít následující příkaz:
Get-WinEvent -FilterHashtable @{LogName='Application'; 'Service'='Bits'}
Poznámka:
Možnost dotazování <named-data>
byla přidána v PowerShellu 6.
Vytvoření dotazu pomocí hashovací tabulky
Pokud chcete ověřit výsledky a řešit problémy, pomůže vám vytvořit tabulku hash po jednom páru klíč-hodnota najednou. Dotaz získá data z protokolu aplikace . Tabulka hash je ekvivalentní hodnotě Get-WinEvent -LogName Application
.
Začněte vytvořením Get-WinEvent
dotazu. Použijte dvojici klíč-hodnota parametru FilterHashtable s klíčem, LogName a hodnotou Application.
Get-WinEvent -FilterHashtable @{
LogName='Application'
}
Pokračujte vytvořením hashovací tabulky pomocí klíče ProviderName . Název ProviderName je obvykle název, který se zobrazí v poli Zdroj v Prohlížeč událostí Windows. Například .NET Runtime
na následujícím snímku obrazovky:
Obrázek zdrojů windows Prohlížeč událostí
Aktualizujte tabulku hash a zahrňte pár klíč-hodnota s klíčem, ProviderName a hodnotou. .NET Runtime
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
}
Poznámka:
U některých zprostředkovatelů událostí je možné získat správný název ProviderName tak, že se podíváte na kartu Podrobnosti ve vlastnostech události. Například události, ve kterých se zobrazí pole Zdroj , je správný Název_zprostředkovatele Microsoft-Windows-Defrag
.Defrag
Pokud váš dotaz potřebuje získat data z archivovaných protokolů událostí, použijte klíč Path . Hodnota Cesta určuje úplnou cestu k souboru protokolu. Další informace najdete v blogovém příspěvku Scripting Guy , pomocí PowerShellu parsovat uložené protokoly událostí pro chyby.
Použití výčtových hodnot v tabulce hash
Klíčová slova jsou dalším klíčem v tabulce hash. Datový typ Klíčová slova je pole [long]
typu hodnoty, které obsahuje velké číslo. Pomocí následujícího příkazu vyhledejte maximální hodnotu [long]
:
[long]::MaxValue
9223372036854775807
Pro klíč Klíčových slov používá PowerShell číslo, ne řetězec, jako je zabezpečení. Windows Prohlížeč událostí zobrazí klíčová slova jako řetězce, ale jsou uvedené hodnoty. Pokud v tabulce hash použijete klíč Keywords s řetězcovou hodnotou, zobrazí se chybová zpráva.
Otevřete Prohlížeč událostí Windows a v podokně Akce klikněte na filtr aktuálního protokolu. Rozevírací nabídka Klíčová slova zobrazuje dostupná klíčová slova, jak je znázorněno na následujícím snímku obrazovky:
Obrázek klíčových slov windows Prohlížeč událostí
K zobrazení StandardEventKeywords
názvů vlastností použijte následující příkaz.
[System.Diagnostics.Eventing.Reader.StandardEventKeywords] |
Get-Member -Static -MemberType Property
TypeName: System.Diagnostics.Eventing.Reader.StandardEventKeywords
Name MemberType Definition
—- ———- ———-
AuditFailure Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
AuditSuccess Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
CorrelationHint Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
CorrelationHint2 Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
EventLogClassic Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
None Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
ResponseTime Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
Sqm Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
WdiContext Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
WdiDiagnostic Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
Výčtové hodnoty jsou zdokumentované v rozhraní .NET Framework. Další informace naleznete v tématu StandardEventKeywords – výčet.
Názvy klíčových slov a výčtové hodnoty jsou následující:
Jméno | Hodnota |
---|---|
AuditFailure | 4503599627370496 |
AuditSuccess | 9007199254740992 |
CorrelationHint2 | 18014398509481984 |
EventLogClassic | 36028797018963968 |
Sqm | 2251799813685248 |
WdiDiagnostic | 1125899906842624 |
WdiContext | 562949953421312 |
Doba odezvy | 281474976710656 |
Nic | 0 |
Aktualizujte tabulku hash a zahrňte pár klíč-hodnota s klíčem, klíčovými slovy a hodnotou výčtu EventLogClassic 36028797018963968.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
}
Hodnota statické vlastnosti klíčových slov (volitelné)
Klíč Klíčových slov je vyčíslen, ale v dotazu na tabulku hash můžete použít název statické vlastnosti. Místo použití vráceného řetězce musí být název vlastnosti převeden na hodnotu s Value__ vlastnost.
Například následující skript používá vlastnost Value__ .
$C = [System.Diagnostics.Eventing.Reader.StandardEventKeywords]::EventLogClassic
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=$C.Value__
}
Filtrování podle ID události
Pokud chcete získat konkrétnější data, výsledky dotazu se filtrují podle ID události. ID události se odkazuje v tabulce hash jako ID klíče a hodnota je konkrétní ID události. Windows Prohlížeč událostí zobrazí ID události. V tomto příkladu se používá ID události 1023.
Aktualizujte tabulku hash a zahrňte pár klíč-hodnota s klíčem, ID a hodnotou 1023.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
}
Filtrování podle úrovně
K dalšímu upřesnění výsledků a zahrnutí pouze událostí, které jsou chyby, použijte klíč úrovně . Windows Prohlížeč událostí zobrazí úroveň jako řetězcové hodnoty, ale jsou uvedené hodnoty. Pokud v tabulce hash použijete klíč úrovně s řetězcovou hodnotou, zobrazí se chybová zpráva.
Úroveň obsahuje hodnoty, jako je chyba, upozornění nebo informační. K zobrazení StandardEventLevel
názvů vlastností použijte následující příkaz.
[System.Diagnostics.Eventing.Reader.StandardEventLevel] |
Get-Member -Static -MemberType Property
TypeName: System.Diagnostics.Eventing.Reader.StandardEventLevel
Name MemberType Definition
---- ---------- ----------
Critical Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Critical {get;}
Error Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Error {get;}
Informational Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Informational {get;}
LogAlways Property static System.Diagnostics.Eventing.Reader.StandardEventLevel LogAlways {get;}
Verbose Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Verbose {get;}
Warning Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Warning {get;}
Výčtové hodnoty jsou zdokumentované v rozhraní .NET Framework. Další informace naleznete v tématu StandardEventLevel – výčet.
Názvy a výčtové hodnoty klíče úrovně jsou následující:
Jméno | Hodnota |
---|---|
Podrobnosti | 5 |
Informační | 4 |
Upozorňující | 3 |
Chyba | 2 |
Kritické | 0 |
LogAlways | 0 |
Tabulka hash dokončeného dotazu obsahuje klíč, úroveň a hodnotu 2.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=2
}
Úroveň statické vlastnosti v výčtu (volitelné)
Klíč úrovně je vyčíslen, ale v dotazu na tabulku hash můžete použít název statické vlastnosti. Místo použití vráceného řetězce musí být název vlastnosti převeden na hodnotu s Value__ vlastnost.
Například následující skript používá vlastnost Value__ .
$C = [System.Diagnostics.Eventing.Reader.StandardEventLevel]::Informational
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=$C.Value__
}