Windows: wyszukiwanie w event log (dziennik zdarzeń)

13-sie-2021

Event log to… „wielki śmietnik” pełen mnóstwa ciekawych informacji. Problemem jest tylko wygrzebanie istotnej informacji.

Potrzebowałem np. sprawdzić, kto logował się interaktywnie do sysytemu w ciągu ostatnich 24 godzin. W tym celu stworzyłem „Custom View”, a w nim zbudowałem warunki filtrujące. To nie było trudne, bo event id dla zdarzenia logowanie to 4624. Problem tylko w tym, że w tym zdarzeniu, w EventData znajduje się pole Logon Type i za logowanie interaktywne odpowiada Logon Type równy 3. Ponieważ jednak każde zdarzenie ma nieco inne właściwości, to nie można wybrać Logon Type w kreatorze.

Na szczęście Event Viewer bazuje na XML i można zbudować w edytorze swoje własne zapytanie, które u mnie wyglądało mniej więcej tak:

<QueryList>
 <Query Id="0" Path="Security">
 <Select Path="Security">*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]</Select>
 <Select Path="Security">*[EventData[(LogonType=3)]]</Select>
 </Query>
</QueryList>

Wprawdzie po modyfikacji XML traci się możliwość wyklikiwania w tym widoku czegokolwiek z poziomu kreatora, ale to na tyle proste sprawy, że ponowne wyklikanie idzie dość szybko.

Osobiście jednak preferuję skrypt, każdorazowe klikanie, wklejanie XML, to nie dla mnie.

Można więc włożyć powyższy XML do cmdletu Get-WinEvent i …. gotowe. W przykładzie poniżej wybieram tylko 3 ostatnie logowania, ale śmiało można brać wszystkie:

$xmlQuery = @'
<QueryList>
 <Query Id="0" Path="Security">
 <Select Path="Security">*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]</Select>
 <Select Path="Security">*[EventData[(LogonType=3)]]</Select>
 </Query>
</QueryList>
'@
Get-WinEvent -FilterXML $xmlQuery -MaxEvents 3 | ft -wrap

Komentarze są wyłączone

Autor: Rafał Kraik