Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten przykład dotyczy tylko platform systemu Windows.
Aby przeczytać oryginalny wpis w blogu Scripting Guy z 3 czerwca 2014 r., zobacz Use FilterHashTable to Filter Event Log with PowerShell (Używanie tabeli FilterHashTable do filtrowania dziennika zdarzeń przy użyciu programu PowerShell).
Ten artykuł jest fragmentem oryginalnego wpisu w blogu i wyjaśnia, jak używać Get-WinEvent
parametru FilterHashtable polecenia cmdlet do filtrowania dzienników zdarzeń. Cmdlet programu PowerShell to potężna metoda filtrowania Get-WinEvent
dzienników zdarzeń i diagnostycznych systemu Windows. Wydajność poprawia się, gdy Get-WinEvent
zapytanie używa parametru FilterHashtable .
Podczas pracy z dużymi dziennikami zdarzeń, wysyłanie obiektów dalej w potoku do polecenia Where-Object
nie jest wydajne. Przed programem PowerShell 6 Get-EventLog
polecenie cmdlet było inną opcją pobierania danych dziennika. Na przykład następujące polecenia są nieefektywne, aby filtrować dzienniki Microsoft-Windows-Defrag :
Get-EventLog -LogName Application | Where-Object Source -Match defrag
Get-WinEvent -LogName Application | Where-Object { $_.ProviderName -match 'defrag' }
Następujące polecenie używa tabeli skrótów, która poprawia wydajność:
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='*defrag'
}
Posty na blogu o enumeracji
W tym artykule przedstawiono informacje o sposobie używania wyliczonych wartości w tabeli skrótów. Aby uzyskać więcej informacji na temat wyliczenia, przeczytaj te wpisy w blogu Scripting Guy . Aby utworzyć funkcję zwracającą wyliczone wartości, zobacz Wyliczenia i Wartości. Aby uzyskać więcej informacji, zobacz serię wpisów w blogu Scripting Guy na temat wyliczenia.
Pary klucz-wartość tabeli skrótu
Aby tworzyć wydajne zapytania, użyj Get-WinEvent
polecenia cmdlet z parametrem FilterHashtable .
FilterHashtable akceptuje tabelę skrótów jako filtr, aby uzyskać określone informacje z dzienników zdarzeń systemu Windows. Tabela skrótów używa par klucz-wartość . Aby uzyskać więcej informacji na temat tabel skrótów, zobacz about_Hash_Tables.
Jeśli pary klucz-wartość znajdują się w tym samym wierszu, muszą być oddzielone średnikiem. Jeśli każda para klucz-wartość znajduje się w osobnym wierszu, średnik nie jest potrzebny. Na przykład ten artykuł umieszcza pary klucz-wartość w osobnych wierszach i nie używa średników.
W tym przykładzie użyto kilku par klucz-wartość parametru FilterHashtable. Ukończone zapytanie obejmuje LogName, ProviderName, Keywords, Id i Level.
Zaakceptowane pary klucz-wartość są wyświetlane w poniższej tabeli i znajdują się w dokumentacji parametru Get-WinEventFilterHashtable .
W poniższej tabeli przedstawiono nazwy kluczy, typy danych oraz to, czy dla wartości danych akceptowane są symbole wieloznaczne.
Nazwa klucza | Typ wartości danych | Akceptuje symbole wieloznaczne? |
---|---|---|
Nazwa logu | <String[]> |
Tak |
Nazwa dostawcy | <String[]> |
Tak |
Ścieżka | <String[]> |
Nie. |
Słowa kluczowe | <Long[]> |
Nie. |
Identyfikator | <Int32[]> |
Nie. |
Poziom | <Int32[]> |
Nie. |
Godzina rozpoczęcia | <DateTime> |
Nie. |
Godzina zakończenia | <DateTime> |
Nie. |
UserID | <SID> |
Nie. |
Dane | <String[]> |
Nie. |
<named-data> |
<String[]> |
Nie. |
Klucz <named-data>
reprezentuje nazwane pole danych zdarzenia. Na przykład zdarzenie Perflib 1008 może zawierać następujące dane zdarzenia:
<EventData>
<Data Name="Service">BITS</Data>
<Data Name="Library">C:\Windows\System32\bitsperf.dll</Data>
<Data Name="Win32Error">2</Data>
</EventData>
Zapytania dotyczące tych zdarzeń można wykonać przy użyciu następującego polecenia:
Get-WinEvent -FilterHashtable @{LogName='Application'; 'Service'='Bits'}
Uwaga
Możliwość wykonywania zapytań dotyczących elementu <named-data>
została dodana w programie PowerShell 6.
Kompilowanie zapytania za pomocą tabeli skrótów
Aby zweryfikować wyniki i rozwiązać problemy, pomaga utworzyć tabelę skrótów jedną parę klucz-wartość naraz. Zapytanie pobiera dane z dziennika aplikacji . Tabela skrótów jest równoważna Get-WinEvent -LogName Application
.
Aby rozpocząć, utwórz Get-WinEvent
zapytanie. Użyj pary klucz-wartość z parametru FilterHashtable, mając klucz LogName i wartość Application.
Get-WinEvent -FilterHashtable @{
LogName='Application'
}
Kontynuuj tworzenie tabeli skrótów przy użyciu klucza ProviderName . Zazwyczaj nazwa Dostawcy to nazwa wyświetlana w polu Źródło w Podglądzie zdarzeń systemu Windows. Na przykład .NET Runtime
na poniższym zrzucie ekranu:
Obraz przedstawiający źródła podglądu zdarzeń systemu Windows
Zaktualizuj tabelę skrótów i dołącz parę klucz-wartość z kluczem ProviderName i wartością .NET Runtime
.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
}
Uwaga
Poprawną nazwę ProviderName dla niektórych dostawców zdarzeń można uzyskać, przeglądając kartę Szczegóły we właściwościach zdarzenia. Na przykład zdarzenia, w których w polu Źródło jest wyświetlane Defrag
, prawidłowa nazwa dostawcy to Microsoft-Windows-Defrag
.
Jeśli zapytanie musi pobrać dane z zarchiwizowanych dzienników zdarzeń, użyj klucza ścieżki . Wartość Ścieżka określa pełną ścieżkę do pliku dziennika. Aby uzyskać więcej informacji, zobacz wpis w blogu Scripting Guy , Używanie programu PowerShell do analizowania zapisanych dzienników zdarzeń pod kątem błędów.
Używanie wyliczonych wartości w tabeli skrótów
Słowa kluczowe to następny klucz w tabeli skrótów. Typ danych Słowa kluczowe to tablica [long]
typu wartości, która zawiera dużą liczbę. Użyj następującego polecenia, aby znaleźć maksymalną wartość :[long]
[long]::MaxValue
9223372036854775807
W przypadku klucza słowa kluczowego program PowerShell używa liczby, a nie ciągu, takiego jak Zabezpieczenia. Podgląd zdarzeń systemu Windows wyświetla słowa kluczowe jako ciągi, ale są to wartości wyliczeniowe. W tabeli skrótów, jeśli używasz klucza słowa kluczowego z wartością ciągu, zostanie wyświetlony komunikat o błędzie.
Otwórz Podgląd zdarzeń systemu Windows i w okienku Akcje kliknij pozycję Filtruj bieżący dziennik. Menu rozwijane Słowa kluczowe wyświetla dostępne słowa kluczowe, jak pokazano na poniższym zrzucie ekranu:
Obraz słów kluczowych podglądu zdarzeń systemu Windows
Użyj następującego polecenia, aby wyświetlić StandardEventKeywords
nazwy właściwości.
[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…
Wyliczone wartości są udokumentowane w programie .NET Framework. Aby uzyskać więcej informacji, zobacz wyliczenie StandardEventKeywords.
Nazwy słów kluczowych i wyliczone wartości są następujące:
Nazwa | Wartość |
---|---|
Błąd audytu | 4503599627370496 |
Sukces Audytu | 9007199254740992 |
CorrelationHint2 | 18014398509481984 |
EventLogClassic | 36028797018963968 |
m² | 2251799813685248 |
WdiDiagnostic | 1125899906842624 |
WdiContext | 562949953421312 |
Czas odpowiedzi | 281474976710656 |
Żaden | 0 |
Zaktualizuj tabelę skrótów i dołącz parę klucz-wartość z kluczem Keywords i wartością wyliczenia EventLogClassic36028797018963968.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
}
Wartość właściwości statycznej słów kluczowych (opcjonalnie)
Klucz Keywords jest wyliczany, ale można użyć nazwy właściwości statycznej w zapytaniu tablicy haszującej. Zamiast używać zwracanego ciągu, nazwa właściwości musi zostać przekonwertowana na wartość z właściwością value__ .
Na przykład poniższy skrypt używa właściwości value__ .
$C = [System.Diagnostics.Eventing.Reader.StandardEventKeywords]::EventLogClassic
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=$C.value__
}
Filtrowanie według identyfikatora zdarzenia
Aby uzyskać bardziej szczegółowe dane, wyniki zapytania są filtrowane według identyfikatora zdarzenia. Identyfikator zdarzenia jest przywołyny w tabeli skrótów jako identyfikator klucza, a wartość jest określonym identyfikatorem zdarzenia. Podgląd zdarzeń systemu Windows wyświetla identyfikator zdarzenia. W tym przykładzie użyto identyfikatora zdarzenia 1023.
Zaktualizuj tabelę skrótów i dołącz parę klucz-wartość z kluczem, identyfikatorem i wartością 1023.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
}
Filtrowanie według poziomu
Aby dodatkowo uściślić wyniki i uwzględnić tylko zdarzenia, które są błędami, użyj klucza poziomu . Podgląd zdarzeń systemu Windows wyświetla Poziom jako wartości ciągu, ale rzeczywiście są to wartości wyliczone. W tabeli skrótów, jeśli używasz klucza Level z wartością typu ciąg znaków, zostanie wyświetlony komunikat o błędzie.
Poziom ma wartości, takie jak Błąd, Ostrzeżenie lub Informacje. Użyj następującego polecenia, aby wyświetlić StandardEventLevel
nazwy właściwości.
[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;}
Wyliczone wartości są udokumentowane w programie .NET Framework. Aby uzyskać więcej informacji, zobacz wyliczenie StandardEventLevel.
Nazwy i wyliczone wartości klucza poziomu są następujące:
Nazwa | Wartość |
---|---|
Pełne informacje | 5 |
Informacyjny | 4 |
Ostrzeżenie | 3 |
Błąd | 2 |
Krytyczny | 1 |
LogAlways | 0 |
Tabela skrótów dla ukończonego zapytania zawiera klucz, poziom i wartość 2.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=2
}
Poziom właściwości statycznej w wyliczeniu (opcjonalnie)
Klucz Level jest wyliczany, ale można użyć nazwy właściwości statycznej w zapytaniu do tabeli skrótu. Zamiast używać zwracanego ciągu, nazwa właściwości musi zostać przekonwertowana na wartość z właściwością value__ .
Na przykład poniższy skrypt używa właściwości value__ .
$C = [System.Diagnostics.Eventing.Reader.StandardEventLevel]::Informational
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=$C.value__
}