Powershell (get-eventlog) – Kto i kiedy zrestartował serwer


 

Jakiś czas temu na naszym Blogu opublikowałem wpis „Informacje o wyłączeniu systemu w dzienniku zdarzeń: kto, kiedy i dlaczego?„, który podpowiada jak z Dziennika Zdarzeń wydobyć cenne informacje o restartach czy wyłączeniach maszyny z systemem Windows. Dzisiaj chciałbym uzupełnić to zagadnienie o bardzo konkretną komendę w Powershellu. Podanym niżej sposobem przeszukamy nasz dziennik, w poszukiwaniu TRZECH ostatnich wpisów o ID 1074.

get-eventlog -LogName System -Source „USER32” | Where {$_.EventID -eq 1074} | select -First 3 | Format-Table -wrap

Przykładowe wpisy

Oto przykładowy rezultat. Co z niego wynika? Jak widać, bez trudu odczytamy daty, godziny , nazwy procesów a także nazwy użytkowników, którzy wywołali restart. W tym konkretnym przykładzie, ostatni restart był zainicjowany przez proces ccmexec.exe, co wskazuje jako winowajcę system „SCCM”, który m.in dystrybuuje poprawki bezpieczeństwa i/lub oprogramowanie. Wcześniejsze dwa, zainicjowali użytkownicy, których nazwy pozwoliłem sobie wymazać: powershell get-eventlog last restarts

Jak za pomocą Powershell (get-eventlog) sprawdzić kto i kiedy zrestartował zdalny komputer lub wiele komputerów?

Łączenie z Dziennikiem Zdarzeń na zdalnej maszynie odbędzie się za pomocą zaledwie jednej dodatkowej flagi (-computername):

get-eventlog -LogName System -Source „USER32” | Where {$_.EventID -eq 1074} | select -First 3 | Format-Table -wrap

Można też pokusić się o napisanie prostego skryptu, który odczyta nam nazwy maszyn z pliku tekstowego.


Clear
$ErrorActionPreference = ‚silentlycontinue’
Remove-Variable [a..z]* -Scope Global
Remove-Variable [1..9]* -Scope Global
$ScriptPath = $MyInvocation.MyCommand.Path
$Dir = Split-Path $ScriptPath
Push-Location $Dir

$ServerName = Get-Content „C:\komputery.txt”

foreach ($Server in $ServerName) {

get-eventlog -computername $servername -LogName System -Source „USER32” | Where {$_.EventID -eq 1074} | select -First 1 | Format-Table -wrap
}


Podobne Tematy: