Get-WinEvent

Pobiera zdarzenia z dzienników i dostawców ETW (nowoczesny).

Get-WinEvent to powershellowy cmdlet do czytania zdarzeń z dzienników Windows. W odróżnieniu od starego Get-EventLog sięga nie tylko do klasycznych logów (System, Application, Security), ale też do setek nowoczesnych kanałów ETW (Event Tracing for Windows) i dostawców, które widzisz w Podglądzie zdarzeń pod Applications and Services Logs. Krótko: jeśli debugujesz wysypujący się serwer, szukasz, kto i kiedy się logował, albo dlaczego usługa nie wstała — to jest twoje pierwsze narzędzie.

Składnia i najważniejsze opcje

Podstawowa forma: Get-WinEvent [-LogName] [-MaxEvents ] [-Oldest]

  • -LogName — nazwa dziennika do odczytu, np. System albo Application. Przyjmuje listę po przecinku i obsługuje znak wieloznaczny *.
  • -FilterHashtable — filtrowanie po stronie dziennika (a nie po pobraniu wszystkiego). Klucze: LogName, ProviderName, ID, Level, StartTime, EndTime. Najszybsza i najwygodniejsza metoda.
  • -MaxEvents — ile zdarzeń maksymalnie zwrócić (liczba całkowita). Domyślnie zwraca wszystkie, a tego zwykle nie chcesz.
  • -Oldest — zwraca od najstarszych do najnowszych; domyślnie kolejność jest odwrotna (najnowsze pierwsze).
  • -ProviderName — pobiera zdarzenia konkretnego dostawcy ETW zamiast całego dziennika.
  • -ListLog — wypisuje dostępne dzienniki i ich metadane (rozmiar, liczba rekordów), bez czytania zdarzeń.
  • -Path — czyta z pliku .evtx, .etl lub .evt zamiast z żywego dziennika.
  • -ComputerName — odpytuje zdalny komputer (wymaga uprawnień i dostępu sieciowego).

Przykłady użycia

  • Get-WinEvent -LogName System -MaxEvents 20 — pokazuje 20 najnowszych zdarzeń z dziennika System.
  • Get-WinEvent -FilterHashtable @{LogName='System'; Level=2; StartTime=(Get-Date).AddDays(-1)} — same błędy (Level 2) z ostatniej doby; szybkie i precyzyjne.
  • Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625} — wszystkie nieudane logowania (klasyka przy polowaniu na próby włamania).
  • Get-WinEvent -ListLog * | Where-Object RecordCount -gt 0 | Sort-Object RecordCount -Descending — lista niepustych dzienników posortowana po liczbie rekordów.
  • Get-WinEvent -Path C:\logi\archiwum.evtx -Oldest -MaxEvents 50 — czyta wyeksportowany plik logu od najstarszych zdarzeń.

Częste błędy i pułapki

Brak filtra = czekanie w nieskończoność. Get-WinEvent -LogName Security bez -MaxEvents i bez -FilterHashtable próbuje pobrać setki tysięcy rekordów. Filtruj zawsze przez -FilterHashtable, bo robi to silnik dziennika, a nie wolny Where-Object po pobraniu wszystkiego.

Dziennik Security wymaga uprawnień. Bez podniesionej konsoli (Uruchom jako administrator) dostaniesz Access denied.

Poziomy mylą. W Level niższa liczba to poważniejszy problem: 1 = krytyczny, 2 = błąd, 3 = ostrzeżenie, 4 = informacja. Łatwo pomylić kierunek.

Brak zdarzeń to nie błąd. Komunikat „No events were found that match the specified selection criteria” oznacza pusty wynik filtra, a nie awarię cmdletu.

Powiązane komendy: Get-EventLog (stary, klasyczne logi), wevtutil (narzędzie wiersza poleceń), New-WinEvent oraz Where-Object do dalszego przesiewania wyników.