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__
}