- Get-WinEvent przewyższa Get-EventLog, umożliwiając zaawansowane filtry i dostęp do nowoczesnych logów
- Użycie tablic skrótów i XPath optymalizuje wyszukiwanie określonych zdarzeń w dużych wolumenach danych. dzienniki
- Umożliwia zarządzanie lokalnymi, zdalnymi i archiwalnymi logami z kontrolą nad uprawnieniami i poświadczeniami
PowerShell Stał się jednym z podstawowych narzędzi do zarządzania zaawansowanymi systemami. WindowsWśród jego najpotężniejszych poleceń cmdlet znajduje się Zdarzenie Get-Win, który umożliwia administratorom i użytkownikom uzyskiwanie dostępu do dzienników zdarzeń, przeprowadzanie audytów i monitorowanie stanu komputerów lub serwerów w bardzo szczegółowy i elastyczny sposób.
W tym artykule dowiesz się wszystkiego, co musisz wiedzieć o Polecenie Get-WinEvent programu PowerShell: od składni, przez różnice w stosunku do innych klasycznych poleceń cmdlet, takich jak Get-EventLog, po praktyczne przykłady, optymalizację filtrów z wykorzystaniem tablic skrótów, szczegółowe informacje o kluczowych parametrach oraz wskazówki, jak najlepiej wykorzystać je do analizy zdarzeń lokalnych i zdalnych. Jeśli chcesz opanować analizę logów i rozwiązywanie problemów w systemie Windows, czytaj dalej.
Czym jest Get-WinEvent i dlaczego jest tak przydatny?
Zdarzenie Get-Win to polecenie cmdlet dostępne wyłącznie w systemie Windows, które umożliwia dostęp i przeglądanie dzienników zdarzeń systemu operacyjnego. Jego główną funkcją jest pobieranie zdarzeń zapisanych zarówno w klasycznych dziennikach (takich jak „System” lub „Aplikacja”), jak i w dziennikach utworzonych od systemu Windows Vista, a także w plikach zewnętrznych (.evtx, .etl y .wydarzenie).
To polecenie zawiera znaczące zalety w stosunku do swojego poprzednika, Pobierz-EventLogNa przykład możesz przeszukiwać logi, do których nie ma dostępu polecenie Get-EventLog, korzystać z zaawansowanych filtrów (tabele skrótów, XPath, ustrukturyzowany XML) i pracować ze zdalnymi logami bez polegania na klasycznym systemie zdalnego dostępu programu PowerShell. Staje się podstawowym narzędziem do monitorowania, audytu i rozwiązywania incydentów. lub analizować aktywność zarówno pojedynczych systemów, jak i dużych infrastruktur serwerowych.
Ogólna składnia i zestawy parametrów
Polecenie cmdlet Get-WinEvent Posiada wszechstronną składnię, która umożliwia wiele zastosowań w zależności od informacji, które chcesz uzyskać, i rodzaju zastosowanego filtra. Oto niektóre z najpopularniejszych zestawów parametrów:
- Wyszukaj według nazwy rekordu:
Get-WinEvent >] ...
- Lista dostępnych rekordów:
Get-WinEvent -ListLog *
- Zapytanie dostawców rekordów:
Get-WinEvent -ListProvider *
- Filtrowanie według tablicy skrótów:
Get-WinEvent -FilterHashtable @{ LogName='Application'; Id=1001 }
- Filtrowane według XPath:
Get-WinEvent -FilterXPath "*]"
- Filtrowane według XML:
Get-WinEvent -FilterXml $xmlQuery
Ważna uwaga: Bez parametrów polecenie Get-WinEvent pobiera wszystkie zdarzenia ze wszystkich dzienników na komputerze lokalnym, co może generować bardzo długie dane wyjściowe. Aby zatrzymać polecenie, wystarczy nacisnąć CTRL + C.
Główne parametry Get-WinEvent
Polecenie cmdlet obsługuje szeroką gamę parametrów, umożliwiając uzyskanie dokładnie tych informacji, których potrzebujesz. Oto szczegółowe podsumowanie najważniejszych z nich:
- -NazwaLogu: Umożliwia określenie jednej lub więcej nazw dziennika zdarzeń. Akceptowane są symbole wieloznaczne.
- -NazwaDostawcy: Filtruj wyniki na podstawie konkretnych dostawców zdarzeń. Idealne do identyfikacji źródła konkretnych zdarzeń.
- -Ścieżka: Umożliwia wyszukiwanie zdarzeń w plikach zapisanych z rozszerzeniem .evtx, .evt lub .etl, nawet na innych komputerach.
- -FilterHashtable: Obsługuje tablicę skrótów z parami klucz-wartość, umożliwiając efektywne filtrowanie według wielu kryteriów (takich jak LogName, ProviderName, ID, Level, dates itd.).
- -FilterXPath / -FilterXml: Umożliwiają stosowanie filtrów bazujących na zapytaniach XPath lub XML dla złożonych kryteriów.
- -MaxEvents: Ogranicza maksymalną liczbę zwracanych zdarzeń, co jest bardzo przydatne, gdy chcemy uniknąć gigantycznych wyników.
- -Najstarszy: Możesz określić, że chcesz otrzymywać zdarzenia posortowane od najstarszych do najnowszych (domyślnie jest odwrotnie).
- -NazwaKomputera: Przeszukuj dzienniki na komputerach zdalnych, określając nazwę NetBIOS, FQDN lub adres IP.
- -Mandat: Umożliwia uwierzytelnianie jako inny użytkownik lub przy użyciu innych danych logowania niż obecne.
- -Siła: Wymaga uwzględnienia w zapytaniu dzienników debugowania i analiz, oprócz standardowych dzienników.
Wiele z tych parametrów można łączyć, aby uzyskać precyzyjne i wydajne zapytanie.
Zaawansowane filtrowanie: korzystanie z FilterHashtable
Jednym z Największe atuty Get-WinEvent to możliwość filtrowania zdarzeń za pomocą tablic skrótów. Zamiast pobierania wszystkich zdarzeń i filtrowania ich w drugim kroku (co jest nieefektywne), Filtruj tabelę haszującą Stosuje filtry w samym procesie zbierania danych, co zwiększa wydajność i zmniejsza zużycie zasobów, zwłaszcza w przypadku dużych dzienników.
W tym kontekście tablica skrótów składa się z par klucz-wartość, takich jak: @{ LogName='Application'; Id=1001; Level=2 }
Każda para będzie stanowić kryterium wyszukiwania. Akceptowane klucze podstawowe obejmują:
- Nazwa dziennika (dozwolone są symbole wieloznaczne): nazwa rekordu.
- NazwaDostawcy (obsługa symboli wieloznacznych): źródło zdarzenia.
- ścieżka: ścieżka do zapisanych plików dziennika.
- Id: numeryczny identyfikator zdarzenia.
- Poziom:poziom ważności (Błąd=2, Ostrzeżenie=3, Informacyjny=4…)
- Słowa kluczowe:filtruj według słów kluczowych technicznych (typ Long[]).
- Czas rozpoczęcia / Koniec czasu: filtruj według zakresu dat.
- ID użytkownika: Identyfikator SID lub nazwa użytkownika powiązana ze zdarzeniem.
- Dane o : niestandardowe dane zdarzeń.
Na przykład, aby uzyskać krytyczne zdarzenia od konkretnego dostawcy w dzienniku aplikacji z ostatnich 2 dni:
$fecha = (Get-Date).AddDays(-2)
Get-WinEvent -FilterHashtable @{ LogName='Application'; ProviderName='.NET Runtime'; Level=1; StartTime=$fecha }
Porada: Każdy klucz w tabeli skrótów może pojawić się tylko raz, a symbole wieloznaczne są dozwolone tylko w LogName i ProviderName.
Praktyczne przykłady zastosowania
Przeszukiwanie i analizowanie dzienników zdarzeń może wydawać się żmudne, ale dzięki wszechstronności tego polecenia cmdlet możliwości są nieograniczone. Oto kilka przykładów opartych na rzeczywistych scenariuszach:
- Wyświetl wszystkie dzienniki zdarzeń dostępne w systemie:
Get-WinEvent -ListLog *
- Pobierz najnowsze zdarzenia z dziennika „System”:
Get-WinEvent -LogName System -MaxEvents 10
- Filtruj tylko błędy aplikacji:
Get-WinEvent -FilterHashtable @{ LogName='Application'; Level=2 }
- Wyświetl zdarzenia wygenerowane przez dostawcę:
Get-WinEvent -FilterHashtable @{ LogName='Application'; ProviderName='Application Error' }
- Sprawdź zdarzenia w innych dziennikach komputera:
Get-WinEvent -LogName System -ComputerName Servidor01
- Odczytaj zapisane pliki:
Get-WinEvent -Path 'C:\Test\Windows PowerShell.evtx'
- Pobierz zdarzenia dla określonego słowa kluczowego:
Get-WinEvent -LogName *PowerShell*, Microsoft-Windows-Kernel-WHEA* | Group-Object -Property LevelDisplayName, LogName -NoElement | Format-Table -AutoSize
Dane wyjściowe, zwrócone obiekty i zgodność
W zależności od użytych parametrów, Zdarzenie Get-Win może zwracać obiekty różnych typów:
- Konfiguracja dziennika zdarzeń: podczas używania -ListLog, zapewnia konfigurację i właściwości dla każdego rekordu.
- Metadane dostawcy: z -ListProvider, wyświetla metadane dla dostawców zdarzeń.
- Rekord dziennika zdarzeń: Domyślnie reprezentuje każde konkretne zdarzenie i jego atrybuty (datę, identyfikator, wiadomość itp.).
Można je przetwarzać w potoku, filtrować, grupować lub eksportować do innych formatów (CSV, HTML, XML itp.). Warto pamiętać, że Zdarzenie Get-Win stopniowo zastępuje Pobierz-EventLog, który był bardziej ograniczony i obsługiwał tylko klasyczne logi.
Zaawansowana wizualizacja i analiza dziennika
Oprócz analizy zdarzeń za pomocą konsoli lub skryptów, możesz przeglądać dzienniki za pomocą Przeglądarka zdarzeń z systemu Windows ((https://mundobytes.com/how-to-use-windows-event-viewer-to-detect-and-anticipate-problems/)), chociaż Get-WinEvent pozwala na większą automatyzację, integrację i zdalne użytkowanie.
Aby analizować trendy lub problemy, skorzystaj z poleceń cmdlet, takich jak Obiekt grupowy grupowanie zdarzeń według ID, Sortuj obiekt aby je posortować i Select-Object Aby ograniczyć liczbę wyświetlanych pól. Na przykład, aby sprawdzić, ile zdarzeń każdego typu znajduje się w dzienniku:
$eventos = Get-WinEvent -LogName 'Windows PowerShell'
$eventos | Group-Object -Property LevelDisplayName | Format-Table Count, Name
Filtrowanie XPath i XML: Kiedy potrzebujesz maksymalnej precyzji
W szczególnie złożonych scenariuszach przydatne może być użycie parametrów takich jak: -FilterXPath y -FilterXml Do zaawansowanych zapytań. Na przykład, aby znaleźć zdarzenia o określonym poziomie i dacie w dzienniku programu Windows PowerShell:
# Filtrado por XPath
Get-WinEvent -LogName 'Windows PowerShell' -FilterXPath "*]]"
# Filtrado por XML
$xmlQuery = @'
<QueryList>
<Query Path="Windows PowerShell">
<Select Path="System">*]]</Select>
</Query>
</QueryList>'
Get-WinEvent -FilterXml $xmlQuery
Porównanie z Get-EventLog i najlepszymi praktykami
Chociaż Pobierz-EventLog Nadal istnieje ze względu na wsteczną kompatybilność, ale jego możliwości są zauważalnie słabsze. Na przykład, uzyskuje dostęp tylko do klasycznych logów i nie pozwala na filtrowanie według dostawcy ani za pomocą XPath/Hashtable. W miarę rozwoju programu PowerShell i wzrostu potrzeb, warto się z nim zapoznać. Zdarzenie Get-Win i skorzystaj z zaawansowanych filtrów i przetwarzania dużej liczby zdarzeń przy mniejszym wpływie na wydajność.
Kilka przydatnych rekomendacji:
- Użyj Pobierz-EventLog do szybkich zapytań w systemie lub logach bezpieczeństwa.
- Zastosuj Zdarzenie Get-Win do filtrowania i analizowania nowoczesnych logów, logów archiwalnych i złożonych scenariuszy.
- Aby znaleźć dokładną ścieżkę do dzienników nieklasycznych, najpierw użyj Podglądu zdarzeń i skopiuj ścieżkę dla parametru -NazwaLogu.
- Unikaj zrzucania wszystkich zdarzeń na konsolę: użyj -MaxEvents Aby ograniczyć dane wyjściowe lub filtrować je przy użyciu tablic skrótów.
- Pracując z dużymi dziennikami lub w obrębie wielu zespołów, automatyzuj zadania za pomocą skryptów i potoków.
Zmienne dziennika programu PowerShell i dostosowywanie
W programie PowerShell można skonfigurować typy rejestrowanych zdarzeń, edytując zmienne preferencji, takie jak: $LogEngineLifeCycleEvent
o $LogCommandHealthEvent
W ten sposób możesz zdecydować, czy chcesz rejestrować dane dotyczące silnika, dostawców lub polecenia wykonane, dostosowując szczegółowość do Twoich potrzeb.
Aktywację/dezaktywację przeprowadza się w następujący sposób:
$LogCommandLifeCycleEvent = $true # Para registrar inicio/fin de comandos
$LogProviderHealthEvent = $false # Para desactivar eventos de proveedor
Zmiany dotyczą tylko bieżącej sesji, chyba że zostaną dodane do profilu programu PowerShell.
Często zadawane pytania dotyczące Get-WinEvent i dzienników zdarzeń
- Czy mogę wyczyścić dziennik zdarzeń programu PowerShell?
Jeśli zClear-EventLog -LogName "Windows PowerShell"
lub z Podglądu zdarzeń (kliknij prawym przyciskiem myszy > Opróżnij dziennik). - Gdzie są przechowywane pliki dziennika zdarzeń?
Znajdują się w%SystemRoot%\System32\winevt\Logs
w plikach .evtx. - Czy możliwe jest przekazywanie logów do scentralizowanego systemu?
Zgadza się. System Windows można skonfigurować tak, aby przekazywał dzienniki zdarzeń do serwera centralnego za pomocą usług natywnych lub narzędzi zewnętrznych. - Czy Get-WinEvent działa w każdej wersji systemu Windows?
Jest obsługiwany tylko w systemach Windows Vista i Server 2008 R2 i nowszych. Nie działa w systemach Windows PE ani Nano Server.
Pisarz z pasją zajmujący się światem bajtów i technologii w ogóle. Uwielbiam dzielić się swoją wiedzą poprzez pisanie i właśnie to będę robić na tym blogu, pokazywać Ci wszystkie najciekawsze rzeczy o gadżetach, oprogramowaniu, sprzęcie, trendach technologicznych i nie tylko. Moim celem jest pomóc Ci poruszać się po cyfrowym świecie w prosty i zabawny sposób.