Как узнать, нуждается ли удаленный сервер в перезагрузке

Обновлено 21.09.2023

перезагрузка logo

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами установили Hyper-V в Windows 11, для запуска виртуальных машин в рамках вашего компьютера. Сегодня я с вами хочу поделиться автоматизированным решением, которое позволит узнать статус удаленного сервера на предмет того нуждается ли он в перезагрузке после установки обновлений или нет. Мы разберем ситуации когда это полезно уметь и в как может вам пригодится.

Сервер в статусе "Ожидание перезагрузки"

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

Что вообще из себя представляет ситуация, когда серверу нужна перезагрузка. Вот пример сервера на базе Windows Server 2022, на него буквально вчера прилетели свежие февральские обновления безопасности. Если на нем зайти в "Центр обновления Windows", то вы обнаружите его в состоянии "Ожидает перезагрузки".

Ожидание перезагрузки

К сожалению, мы не всегда можем поддерживать работу наших серверов круглосуточно и без выходных. Существует множество различных причин, по которым серверу может потребоваться перезагрузка, например, программное обеспечение, которому необходимо изменить что-то в данный момент, заблокированный файл, который отказывается отпускать без загрузки, или, возможно, служба, которая может применить изменение только во время загрузки.

Самое печальное будет, если сервер перезагрузиться сам посчитав, что сейчас можно, это актуально из-за очень сомнительных настроек по невозможности запретить перезагрузку, теперь ее можно только откладывать. Если вы управляете большим количеством серверов, вы можете запланировать окно обслуживания, чтобы перезагрузить их все сразу, а не по мере необходимости. В таком случае вам нужно знать, какие из них нуждаются в перезагрузке, а какие нет. Как определить, что это не слишком понятно на сервере Windows.

Как понять, что серверу нужна перезагрузка

Тут все очень просто, вам нужно просто знать какие из ключей реестра меняет система после установки обновлений безопасности и выставлением статуса "Ожидание перезагрузки". Вот эти ключи:

  • ✅RebootPending  - HKLM\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing - отвечает за управление компонентами Windows, включая обновления, пакеты обновлений и другие компоненты. Эта ветка реестра содержит информацию о компонентах, установленных на компьютере, и их текущей версии. Она также содержит информацию о состоянии обновлений, установленных на компьютере, и о том, какие компоненты требуют обновления. Если ключа нет, то и ожидание перезагрузки нет.

RebootPending 

  • ✅RebootRequired - HKLM\Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update - Данная ветка реестра содержит информацию о настройках автоматического обновления операционной системы Windows. В ней хранятся параметры, которые определяют частоту и способ получения обновлений, а также настройки уведомлений об их наличии. Например, здесь можно установить режим автоматического обновления, выбрать время и день недели для его запуска, а также настроить параметры прокси-сервера для получения обновлений. Кроме того, в этой ветке реестра хранятся сведения о последнем обновлении и его статусе. Если ключа нет, то и ожидание перезагрузки нет.

Так же интересно - Что такое software reporter tool

RebootRequired

  • ✅PendingFileRenameOperations - Ветка реестра HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager отвечает за управление сеансами работы в системе и содержит информацию о настройках сессий, загрузке драйверов и служб, а также о транзакционной обработке файловой системы. Ключ PendingFileRenameOperations в этой ветке используется для отложенного переименования или удаления файлов. Когда операционная система не может выполнить операцию переименования или удаления файла, из-за того что он используется другим процессом, она добавляет соответствующую запись в ключ PendingFileRenameOperations. Эта запись будет выполнена при следующей перезагрузке системы, когда файл уже не будет использоваться другим процессом. Этот ключ может содержать информацию о нескольких отложенных операциях переименования или удаления файлов.

Логично предположить, что если какой-либо из ключей существует в соответствующем месте, для этого компьютера требуется перезагрузка, это мы и будем использовать в нашем PowerShell скрипте. Тут мы будим делать запрос на удаленный сервер и если там есть ключи реестра RebootPending и RebootRequired, то мы будем выводить значение "True", если они отсутствует, то значение "False".

Как локально понять что требуется перезагрузка через PowerShell

Запустите оболочку PowerShell от администратора и введите команду:

Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion \Component Based Servicing\RebootPending"

и

Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion \WindowsUpdate\Auto Update\RebootRequired"

Напоминаю. что если возвращает True,  то означает, что ваш локальный компьютер нуждается в перезагрузке.

Проверка наличия в реестре RebootPending

Чтобы выполнить тот же командлет на удаленном компьютере, вам понадобится помощь от Invoke-Command, вот пример команды:

$command = {Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending"}

Invoke-Command -computer Имя_компьютера -ScriptBlock $command

Проверка наличия в реестре RebootPending на удаленном хосте

Для успешного выполнения Invoke-Command необходимо включить PSRemoting/WinRM на удаленном компьютере. Теперь давайте попробуем получить простой PowerShell скрипт, для проверки компьютера по имени, о необходимости перезагружать систему.

$pendingReboot = @(
@{
Name = "Reboot Pending Status:"
Test = { Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending"}
}
@{
Name = "Reboot Required by Windows Update:"
Test = { Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"}
})
$computername = "Укажите имя компьютера"
$session = New-PSSession -Computer $computername
foreach ($test in $pendingReboot) {
$result = Invoke-Command -Session $session -ScriptBlock $test.Test
$test.Name + $result
}

Скрипт PowerShell по определению ожидаия перезагрузки

Теперь как узнать, нуждается ли список удаленных серверов в перезагрузке. Тут мы немного подшаманим наш скрипт, и заставим его брать в переменную файл со списком ваших серверов, и на каждом из них по циклу производить запрос в ветки реестра.

$servers = Get-Content -Path "C:\temp\rds\servers.txt"
$pendingReboot = @(
@{
Name = "Reboot Pending Status: "
Test = { Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending"}
}
@{
Name = "Reboot Required by Windows Update: "
Test = { Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"}
})
foreach ($server in $servers) {
$session = New-PSSession -Computer $server
foreach ($test in $pendingReboot) {
$result = Invoke-Command -Session $session -ScriptBlock $test.Test
Write-Host "$server $($test.Name) $($result)"
}
Remove-PSSession $session
}

Массовая проверка серверов на статус ожидает перезагрузки

В результате проделанной работы, вы теперь умеете:

  • 1️⃣Определять нуждается ли компьютер в перезагрузке, через графический интерфейс
  • 2️⃣Определять нуждается ли компьютер в перезагрузке, через PowerShell
  • 3️⃣Делать запрос к списку удаленных серверов, на наличие у них статуса "Ожидает перезагрузки"

Миссия выполнена, с вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.

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

2 Responses to Как узнать, нуждается ли удаленный сервер в перезагрузке

  1. Андрей Н.:

    Ещё можно в Server Manager добавить список удалённых ПК или серверов (опционально — создать для них группы), и там в столбце «управляемость» будет отображаться статус «В ожидании перезапуска».

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

    Кстати да Андрей, я и забыл, что в RDS так вижу

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

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