Как узнать кто перезагрузил сервер Windows

Обновлено 18.04.2023

Как узнать кто перезагрузил сервер Windows

Всем привет, сегодня небольшая заметка для начинающих системных администраторов, рассмотрим вопрос как определить кто перезагрузил сервер Windows. Бывают ситуации, что по какой то причине отваливается сервер его удаленно перезагрузили, зайдя на которой вы не видите что у него был синий экран BSOD, и значит надо искать кто то его отправил в ребут. Вам необходимо выяснить кто это был.

И так рассматривать кто перезагрузил сервер Windows я буду на примере Windows Server 2008 R2, но все действия абсолютно одинаковы в любой версии Windows начиная с Vista. Поможет нам в реализации нашей задачи оснастка Просмотр событий. Открыть его можно Пуск-Администрирование-Просмотр событий или нажать WIN+R и ввести там evenvwr.msc.

Просмотр событий W208R2

Так же просмотр событий вы можете запустить напечатав в поиске или меню "Пуск" такую команду eventvwr.msc

у вас откроется оснастка Просмотр событий. Вам нужно выбрать журнал Windows Система. В нем как раз и находится нужная нам информация в виде события. Проблема в том что их генерируется порой очень много, для этого придумали фильтр. Жмем справа в колонке действия Фильтр текущего журнала.

Система просмотр событий

В открывшемся окне вам нужно отфильтровать данный журнал. Задаем дату, я выставил период за последнюю неделю,

можете выставить и меньше и больше. Выбираем уровень событий, ставим все и самое главное какой будет источник событий. В источнике событий выбираете USER32, он и хранит нужный лог.

фильтр журнала система

В итоге у меня получилась вот такая картина

Как узнать кто перезагрузил сервер Windows-05

После нажатия кнопки ок вы получите отфильтрованный журнал система, у меня нашлось одно событие. Код события 1074 о том что сервер с Windows Server 2008 R2 был перезагружен системой после установки программы Microsoft SOAP Toolkit.

Как узнать кто перезагрузил сервер Windows-02

Мне этого мало и нужно понять кто начал установку данного приложения. Для этого так же переходив уже в журнал Приложения, делаем фильтр, дату ставим например тоже неделю

журнал приложения

Еще отфильтруем по кодам событий с 1035-1040

Как узнать кто перезагрузил сервер Windows-07

И в итоге мы видим вот такое событие

Начало транзакции установщика Windows: C:\Users\имя пользователя\AppData\Local\Temp\IXP000.TMP\soapsdk.msi. ИД клиентского процесса: 6264.

Как узнать кто перезагрузил сервер Windows-08

и еще одно

Установщик Windows изменил настройку продукта. Продукт: Microsoft SOAP Toolkit 3.0. Версия: 3.0.1325.4. Язык: 1033. Изготовитель: Microsoft Corporation. Изменение настройки завершено с состоянием: 1625.

Как узнать кто перезагрузил сервер Windows-09

Вот мы и выяснили кто он мистер Х. В качестве эксперимента можете удаленно перезагрузить тестовую машину или например я рассказывал как перезагрузить компьютер через командную строку.

Как удаленно узнать кто перезагрузил сервер

Для этого я так же воспользуюсь PowerShell скриптом:

$computerName = Read-Host "Введи удаленный сервер"
$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.

Как удаленно узнать кто перезагрузил сервер

Либо можно таким образом:

Invoke-Command -ComputerName term18 -ScriptBlock {Get-WinEvent -FilterHashtable @{logname=’System’;id=1074} |select-object TimeCreated,Id,Message -first 1}

На выходе вы получите такое сообщение:

TimeCreated : 08.04.2023 9:35:36
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

Удаленная проверка события 1074

Можно сделать и для списка серверов, который заранее положить в текстовый файл, вот такой пример:

$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

Массово узнать кто перезагрузил сервер

Напомню, какие и где дергать поля с параметрами.

ID 1074

Материал сайта pyatilistnik.org

Автор - Сёмин Иван

6 Responses to Как узнать кто перезагрузил сервер Windows

  1. Артур:

    Очень полезно иногда бывает в спорных ситуациях понять, кто что делал на сервере.

  2. Evgeny:

    eventvwr.msc опечатка в тексте

  3. Иван Семин:

    Спасибо

  4. Alex Shader:

    Фролов и Чамин, судя по всему)

  5. Сергей:

    Всё здорово. Но вот у меня DrWeb после внезапного обновления инициировал перезагрузку. И хотелось бы узнать, кто нажал на ту самую кнопку «Перезагрузить компьютер». Журнал Windows 2016 не даёт такой ответ в журнале Приложение. А журнал DrWeb довольно скудный — есть только запись об успешном обновлении.

  6. Андрей:

    evenTvwr.msc

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *