chaoschciałem zrobić szybką wrzutę na temat odczytywania zdarzeń z logu ‘applications and services logs’… i okazuje się, że to całe małe universum XMLowe…

najważniejsze informacje: logi systemowe można czytać łatwo i przyjemnie przy pomocy ‘get-EventLog’. jednak kiedy chce się odczytać coś z logów aplikacji zaczynają się schody. jest polecenie ‘Get-WinEvent‘, jednak mechanizm za nim się kryjący jest okrutnie nieprzyjemny. cała architektura oparta jest na XMLu, w związq z czym jakiekolwiek przeszukiwanie albo jest pop(*^@#!@ne albo niewydajne. przykłady filtrów XML – standardowy i xPath ze strony technet:

# Use FilterXML

PS C:\>Get-WinEvent -FilterXML "<QueryList><Query><Select Path='Windows PowerShell'>*[System[Level=3 and TimeCreated[timediff(@SystemTime)&lt;= 86400000]]]</Select></Query></QueryList>"

# Use FilterXPath

PS C:\>Get-WinEvent -LogName "Windows Powershell" -FilterXPath "*[System[Level=3 and TimeCreated[timediff(@SystemTime) &lt;= 86400000]]]"

w dużym skrócie – jest to zupełnie nieprzydatne w zastosowaniu codziennej administracji ponieważ:

  • trzeba nie tyle ‘znać’ obsługę XML ale ‘mieć ją wkompliowaną w mózg’. jak ktoś z tego korzysta dzień w dzień, to może trzepnie taki kodzik na kolanie, ale jak raz na jakiś czas trzeba coś wyszukać…
  • nie da się na stałe zrobić zapytania, ponieważ zdarzenia mają różną strukturę – składają się z różnych elementów. jak to w XML – trzeba ‘crawlować’  po elementach, bo ich struktura nie jest z góry znana
  • dwie różne metody, dwa totalnie różne zapisy, do tego w żaden sposób nie przystające do reszty PS

a przecież XML można przedstawić za pomocą obiektu… czemu ten wynalazek nie zwraca normalnego, ludzkiego obiektu z atrybutami?

polecam art, w którym można poczytać jak się przez to przegryźć.

a na szybko, bez developerki, może niewydajnie, ale działa:

scenariusz: znaleźć logi hyper-v, w których są wpisy dotyczące maszyny o nazwie ‘VMNAME’

Get-WinEvent -ComputerName HYPERVSRVo1 -LogName 'Microsoft-Windows-Hyper-V-VMMS-admin' |? message -like '*VMNAME*'|select timecreated,id,message|fl *

inne pomocnicze polecenia na początek to ‘get-WinEvent -listProvider *’ oraz ‘get-WinEvent -listLog *’. trzeba jakiś list otwarty do scripting guy’a napisać, żeby ponaciskał na uczłowieczenie dostępu do logów aplikacyjnych… ahhh.. żeby tak czas pozwolił to można własny moduł napisać… /:

eN.

 

Spread the love

Zostaw komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Time limit is exhausted. Please reload CAPTCHA.