PowerShell: Jak sprawdzić co było przyczyną uruchomienia/restartu serwera Windows?

W jaki sposób sprawdzić co było przyczyną restartu serwera? Jak sprawdzić przyczynę restartu czy ponownego uruchomienia maszyny z użyciem PowerShell? Jak przeglądać dziennik zdarzeń z użyciem konsoli?

Informacje na temat ponownego uruchomienia komputera z system Windows przechowywane są w dzienniku zdarzeń SYSTEM. Same zdarzenia które mówią nam coś restarcie systemu posiadają następujące ID:

IDOpis zdarzenia
1074System has been shutdown by a process/user
6005The Event log service was started
6006The Event log service was stopped
6008The previous system shutdown at time on date was unexpected

Podsumowując identyfikator zdarzenia 1704 dokumentuje zdarzenia zamknięcia systemu przez proces lub użytkownika. Identyfikatory zdarzeń 6005, 6006 i 6008 dokumentują zdarzenia związane z cyklem zasilania i mogą, ale nie muszą być przydatne (w zależności od konkretnej sytuacji).

Połączenie zdarzeń 600X z 1074 daje obraz tego, ile czasu zajęło wykonanie operacji ponownego uruchomienia.

Kod 6008 jest ważny przy rozpoznawaniu sytuacji, w których na komputerze mógł pojawić się niebieski ekran lub nieoczekiwana utrata zasilania.

W przeszukiwaniu dzienników zdarzeń używamy polecenia: Get-WinEvent w naszym wypadku skrypt będzie wyglądał następująco:

Get-WinEvent -FilterHashtable @{logname = 'System'; id = 1074, 6005, 6006, 6008}

w jego wyniku otrzymamy listę wszystkich zarejestrowanych w dzienniku zdarzeń – aby wyfiltrować tylko ostatnie użyjemy parametru -MaxEvents

Get-WinEvent -FilterHashtable @{logname = 'System'; id = 1074, 6005, 6006, 6008} -MaxEvents 1

Spróbujmy jeszcze bardziej czytelnie przedstawić otrzymane informacje formatując wynik używając Format-Table -Wrap

Get-WinEvent -FilterHashtable @{logname = 'System'; id = 1074, 6005, 6006, 6008} -MaxEvents 1 | Format-Table -Wrap

Jak sprawdzić dziennik na zdalnym komputerze?

Wystarczy wzbogacić naszego onelinera o parametr -ComputerName gdzie wskażemy nazwę hosta:

Get-WinEvent -ComputerName ad01.sprawdzone.it -FilterHashtable @{logname = 'System'; id = 1074, 6005, 6006, 6008} -MaxEvents 1 | Format-Table -Wrap