Как узнать кто перезагрузил сервер Windows
Всем привет, сегодня небольшая заметка для начинающих системных администраторов, рассмотрим вопрос как определить кто перезагрузил сервер Windows. Бывают ситуации, что по какой то причине отваливается сервер его удаленно перезагрузили, зайдя на которой вы не видите что у него был синий экран BSOD, и значит надо искать кто то его отправил в ребут. Вам необходимо выяснить кто это был.
И так рассматривать кто перезагрузил сервер Windows я буду на примере Windows Server 2008 R2, но все действия абсолютно одинаковы в любой версии Windows начиная с Vista. Поможет нам в реализации нашей задачи оснастка Просмотр событий. Открыть его можно Пуск-Администрирование-Просмотр событий или нажать WIN+R и ввести там evenvwr.msc.
у вас откроется оснастка Просмотр событий. Вам нужно выбрать журнал Windows Система. В нем как раз и находится нужная нам информация в виде события. Проблема в том что их генерируется порой очень много, для этого придумали фильтр. Жмем справа в колонке действия Фильтр текущего журнала.
В открывшемся окне вам нужно отфильтровать данный журнал. Задаем дату, я выставил период за последнюю неделю,
можете выставить и меньше и больше. Выбираем уровень событий, ставим все и самое главное какой будет источник событий. В источнике событий выбираете USER32, он и хранит нужный лог.
В итоге у меня получилась вот такая картина
После нажатия кнопки ок вы получите отфильтрованный журнал система, у меня нашлось одно событие. Код события 1074 о том что сервер с Windows Server 2008 R2 был перезагружен системой после установки программы Microsoft SOAP Toolkit.
Мне этого мало и нужно понять кто начал установку данного приложения. Для этого так же переходив уже в журнал Приложения, делаем фильтр, дату ставим например тоже неделю
Еще отфильтруем по кодам событий с 1035-1040
И в итоге мы видим вот такое событие
и еще одно
Вот мы и выяснили кто он мистер Х. В качестве эксперимента можете удаленно перезагрузить тестовую машину или например я рассказывал как перезагрузить компьютер через командную строку.
Как удаленно узнать кто перезагрузил сервер
Для этого я так же воспользуюсь PowerShell скриптом:
$events = Get-WinEvent -ComputerName $computerName -FilterHashtable @{Logname='System';ID=1074} -ErrorAction SilentlyContinue
if($events){
$eventsTable = @()
foreach($event in $events){
$eventProperties = [ordered]@{
'TimeCreated' = $event.TimeCreated
'User' = $event.Properties[0].Value
'Reason' = $event.Properties[1].Value
'Comment' = $event.Properties[2].Value
}
$eventsTable += New-Object psobject -Property $eventProperties
}
$eventsTable | Format-Table -AutoSize
}
else{
Write-Host "На удаленном сервере нет событий ID1074"
}
При его выполнении у вас попросят имя удаленного сервера, указываем его и нажимаем "Enter", после этого скрипт выполнит удаленный запрос и выведет вам список событий с кодом ID 1074.
Либо можно таким образом:
На выходе вы получите такое сообщение:
Id : 1074
Message : The process C:\Windows\system32\svchost.exe (TERM18) has initiated the Перезапустить of computer TERM18 on behalf of user NT AUTHORITY\СИСТЕМА for the following reason: Операционная система: Установка пакета обновления (Запланирован
Reason Code: 0x80020010
Shutdown Type: Перезапустить
Comment:
PSComputerName : term18
RunspaceId : 827e6565-79cc-44d2-b53b-c6eb67adfa20
Можно сделать и для списка серверов, который заранее положить в текстовый файл, вот такой пример:
$servers = Get-Content "C:\temp\servers-list.txt"
foreach ($server in $servers) {
Invoke-Command -ComputerName $server -ScriptBlock {
Get-EventLog -LogName System |
where {$_.EventId -eq 1074} |select-object -first 10 |
ForEach-Object {
$rv = New-Object PSObject | Select-Object Date, User, Action, process, Reason, ReasonCode
if ($_.ReplacementStrings[4]) {
$rv.Date = $_.TimeGenerated
$rv.User = $_.ReplacementStrings[6]
$rv.Process = $_.ReplacementStrings[0]
$rv.Action = $_.ReplacementStrings[4]
$rv.Reason = $_.ReplacementStrings[2]
$rv
}
} | Select-Object Date, Action, Reason, User, Process |ft
Напомню, какие и где дергать поля с параметрами.
Материал сайта pyatilistnik.org
eventvwr.msc опечатка в тексте
Спасибо
Фролов и Чамин, судя по всему)
Всё здорово. Но вот у меня DrWeb после внезапного обновления инициировал перезагрузку. И хотелось бы узнать, кто нажал на ту самую кнопку «Перезагрузить компьютер». Журнал Windows 2016 не даёт такой ответ в журнале Приложение. А журнал DrWeb довольно скудный — есть только запись об успешном обновлении.
evenTvwr.msc