Get-WinEvent lekérdezések létrehozása FilterHashtable használatával
Ez a minta csak Windows-platformokra vonatkozik.
Az eredeti, 2014 . június 3-i Scripting Guy blogbejegyzés elolvasásához lásd : Az eseménynapló szűrése a FilterHashTable használatával a PowerShell-lel.
Ez a cikk az eredeti blogbejegyzés egy részlete, amely bemutatja, hogyan használható a Get-WinEvent
parancsmag FilterHashtable paramétere az eseménynaplók szűrésére. A PowerShell parancsmagja Get-WinEvent
hatékony módszer a Windows-események és diagnosztikai naplók szűrésére. A teljesítmény akkor javul, ha egy Get-WinEvent
lekérdezés a FilterHashtable paramétert használja.
Ha nagy eseménynaplókkal dolgozik, nem hatékony objektumokat küldeni a folyamatból egy Where-Object
parancsnak. A PowerShell 6 előtt a Get-EventLog
parancsmag egy másik lehetőség volt a naplóadatok lekérésére. Az alábbi parancsok például nem hatékonyak a Microsoft-Windows-Töredezettségmentesítési naplók szűréséhez:
Get-EventLog -LogName Application | Where-Object Source -Match defrag
Get-WinEvent -LogName Application | Where-Object { $_.ProviderName -Match 'defrag' }
A következő parancs egy kivonattáblát használ, amely javítja a teljesítményt:
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='*defrag'
}
Blogbejegyzések az enumerálásról
Ez a cikk az enumerált értékek kivonattáblában való használatáról nyújt tájékoztatást. Az enumerálással kapcsolatos további információkért olvassa el ezeket a Scripting Guy blogbejegyzéseket. Ha olyan függvényt szeretne létrehozni, amely az enumerált értékeket adja vissza, tekintse meg az Enumerációk és értékek című témakört. További információkért lásd a Scripting Guy blogbejegyzések sorozatát az enumerálásról.
Kivonattábla kulcs-érték párjai
A hatékony lekérdezések létrehozásához használja a Get-WinEvent
parancsmagot a FilterHashtable paraméterrel.
A FilterHashtable szűrőként elfogad egy kivonattáblát, hogy konkrét információkat kapjon a Windows eseménynaplóiból. A kivonattáblák kulcs-érték párokat használnak. További információ a kivonattáblákról: about_Hash_Tables.
Ha a kulcs-érték párok ugyanazon a sorban vannak, pontosvesszővel kell elválasztani őket. Ha minden kulcs-érték pár külön sorban van, nincs szükség pontosvesszőre. Ez a cikk például külön sorokba helyezi a kulcs-érték párokat, és nem használ pontosvesszőket.
Ez a minta a FilterHashtable paraméter kulcs-érték párjait használja. A befejezett lekérdezés tartalmazza a LogName, a ProviderName, a Kulcsszavak, az Azonosító és a Szint lehetőséget.
Az elfogadott kulcs-érték párok az alábbi táblázatban láthatók, és a Get-WinEventFilterHashtable paraméter dokumentációjában szerepelnek.
Az alábbi táblázat a kulcsneveket, az adattípusokat és a helyettesítő karaktereket jeleníti meg az adatértékek esetében.
Kulcs neve | Érték adattípusa | Helyettesítő karaktereket fogad el? |
---|---|---|
LogName | <String[]> |
Igen |
ProviderName | <String[]> |
Igen |
Elérési út | <String[]> |
Nem |
Kulcsszavak | <Long[]> |
Nem |
ID (Azonosító) | <Int32[]> |
Nem |
Level | <Int32[]> |
Nem |
StartTime | <DateTime> |
Nem |
EndTime | <DateTime> |
Nem |
UserID | <SID> |
Nem |
Adatok | <String[]> |
Nem |
<named-data> |
<String[]> |
Nem |
A <named-data>
kulcs egy elnevezett eseményadatmezőt jelöl. A Perflib event 1008 például a következő eseményadatokat tartalmazhatja:
<EventData>
<Data Name="Service">BITS</Data>
<Data Name="Library">C:\Windows\System32\bitsperf.dll</Data>
<Data Name="Win32Error">2</Data>
</EventData>
Ezeket az eseményeket az alábbi paranccsal kérdezheti le:
Get-WinEvent -FilterHashtable @{LogName='Application'; 'Service'='Bits'}
Feljegyzés
A lekérdezési <named-data>
lehetőség a PowerShell 6-ban lett hozzáadva.
Lekérdezés létrehozása kivonattáblával
Az eredmények ellenőrzéséhez és a problémák elhárításához segít egyszerre egy kulcs-érték párból összeállítani a kivonattáblát. A lekérdezés adatokat kér le az alkalmazásnaplóból . A kivonattábla egyenértékű a következő értékével Get-WinEvent -LogName Application
: .
Először hozza létre a lekérdezést Get-WinEvent
. Használja a FilterHashtable paraméter kulcs-érték párját a kulcs, a LogName és az alkalmazás értékével.
Get-WinEvent -FilterHashtable @{
LogName='Application'
}
Folytassa a kivonattábla összeállítását a ProviderName kulccsal. A ProviderName általában a Windows Eseménynapló Forrás mezőjében megjelenő név. Például .NET Runtime
a következő képernyőképen:
Windows Eseménynapló-források képe
Frissítse a kivonattáblát, és foglalja bele a kulcs-érték párot a kulccsal, a ProviderName és az értékkel. .NET Runtime
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
}
Feljegyzés
Egyes eseményszolgáltatók esetében a megfelelő ProviderName az Esemény tulajdonságai lap Részletek lapján érhető el. Például olyan események, ahol a Forrás mező láthatóDefrag
, a megfelelő ProviderName.Microsoft-Windows-Defrag
Ha a lekérdezésnek archivált eseménynaplókból kell adatokat lekérnie, használja az Elérési út kulcsot. Az Elérési út érték a naplófájl teljes elérési útját adja meg. További információkért lásd a Scripting Guy blogbejegyzést, amely a PowerShell használatával elemzi a mentett eseménynaplókat a hibákhoz.
Számbavételi értékek használata kivonattáblában
A kulcsszavak a következő kulcs a kivonattáblában. A Kulcsszavak adattípus a nagy számot tartalmazó értéktípus tömbje [long]
. A következő paranccsal keresse meg a maximális értéket [long]
:
[long]::MaxValue
9223372036854775807
A Kulcsszavak kulcs esetében a PowerShell egy számot használ, nem pedig egy sztringet, például a Biztonságot. A Windows Eseménynapló sztringként jeleníti meg a kulcsszavakat, de ezek számbavételi értékek. A kivonatoló táblában, ha a Kulcsszavak kulcsot sztringértékkel használja, hibaüzenet jelenik meg.
Nyissa meg a Windows Eseménynapló, és a Műveletek panelen kattintson az Aktuális napló szűrése elemre. A Kulcsszavak legördülő menü az elérhető kulcsszavakat jeleníti meg az alábbi képernyőképen látható módon:
Windows Eseménynapló kulcsszavak képe
A tulajdonságnevek megjelenítéséhez használja az StandardEventKeywords
alábbi parancsot.
[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…
Az enumerált értékek dokumentálva vannak a .NET-keretrendszer. További információ: StandardEventKeywords Enumeration.
A Kulcsszavak nevek és az enumerált értékek a következők:
Név szerint | Érték |
---|---|
AuditFailure | 4503599627370496 |
AuditSuccess | 9007199254740992 |
CorrelationHint2 | 18014398509481984 |
EventLogClassic | 36028797018963968 |
Nm | 2251799813685248 |
WdiDiagnostic | 1125899906842624 |
WdiContext | 562949953421312 |
ResponseTime | 281474976710656 |
Egyik sem | 0 |
Frissítse a kivonattáblát, és adja meg a kulcs-érték párot a kulccsal, a kulcsszavakkal és az EventLogClassic enumerálási értékkel, 36028797018963968.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
}
Kulcsszavak statikus tulajdonságértéke (nem kötelező)
A Kulcsszavak kulcs enumerálva van, de használhat statikus tulajdonságnevet a kivonattáblázat lekérdezésében. A visszaadott sztring használata helyett a tulajdonság nevét a Value__ tulajdonsággal rendelkező értékké kell konvertálni.
Az alábbi szkript például a Value__ tulajdonságot használja.
$C = [System.Diagnostics.Eventing.Reader.StandardEventKeywords]::EventLogClassic
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=$C.Value__
}
Szűrés eseményazonosító szerint
Pontosabb adatok lekéréséhez a lekérdezés eredményeit eseményazonosító szűri. Az eseményazonosítóra kulcsazonosítóként hivatkozik a kivonattáblában, az érték pedig egy adott eseményazonosító. A Windows Eseménynapló megjeleníti az eseményazonosítót. Ez a példa az 1023-at használja.
Frissítse a kivonattáblát, és adja meg a kulcs-érték párot a kulccsal, az azonosítóval és az 1023 értékkel.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
}
Szűrés szint szerint
Az eredmények további finomításához és csak a hibákat tartalmazó események belefoglalásához használja a Level billentyűt. A Windows Eseménynapló sztringértékekként jeleníti meg a szintet, de számbavételi értékek. A kivonatoló táblában, ha a Szint kulcsot sztringértékkel használja, hibaüzenet jelenik meg.
A szint olyan értékeket tartalmaz, mint a Hiba, a Figyelmeztetés vagy a Tájékoztató. A tulajdonságnevek megjelenítéséhez használja az StandardEventLevel
alábbi parancsot.
[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;}
Az enumerált értékek dokumentálva vannak a .NET-keretrendszer. További információ: StandardEventLevel Enumeration.
A Szintkulcs nevei és számbavételi értékei a következők:
Név szerint | Érték |
---|---|
Részletezés | 5 |
Tájékoztató | 4 |
Figyelmeztetés | 3 |
Hiba | 2 |
Kritikus | 0 |
LogAlways | 0 |
A befejezett lekérdezés kivonattáblája tartalmazza a kulcsot, a Szintet és az értéket( 2).
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=2
}
Statikus tulajdonság szintje az enumerálásban (nem kötelező)
A Level kulcs enumerálva van, de használhat statikus tulajdonságnevet a kivonattáblázat lekérdezésében. A visszaadott sztring használata helyett a tulajdonság nevét a Value__ tulajdonsággal rendelkező értékké kell konvertálni.
Az alábbi szkript például a Value__ tulajdonságot használja.
$C = [System.Diagnostics.Eventing.Reader.StandardEventLevel]::Informational
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=$C.Value__
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: