PowerShell: найти компьютеры ожидающие перезагрузки

При установке некоторых патчей или обновлений безопасности, для их применения требуется перезагрузка Windows. Однако, если пользователь постоянно откладывает перезагрузку или вы отключили автоматическую перезагрузку на серверах/рабочих станциях после установки обновления (например, через групповую политику Windows Update), в могут остаться хосты, которые установили обновления, но фактически не применили их, ожидая перезагрузки. В больших сетях часто можно найти десятки устройств, которые висят в статусе PendingReboot неделями. Рассмотрим, как найти в сети компьютеры, которые ожидают перезагрузку после установки обновлений.

В нашем случае есть Windows Server, который завершил установку обновлений, но фактически не был перезагружен, отображая в панели управления Windows Update статус Pending Restart.

статус Pending Restart в панели управления Windows Update

Для проверки статуса ожидающей перезагрузки можно воспользоваться готовым модулем PendingReboot из PowerShell Gallery. Чтобы установить этот PowerShell модуль, выполните команду:

Install-Module -Name PendingReboot

Проверить, требует ли компьютер перезагрузки:

Test-PendingReboot

IsRebootPending: True

PowerShell модуль PendingReboot

С помощью опции Detailed командлет может вывести дополнительную информацию, указывающие на причину ожидания перезагрузки (установка обновлений, добавление в домен, установка/удаление компонентов).

Test-PendingReboot -Detailed

Test-PendingReboot - причины по которой Windows требует перезагрузку

ComponentBasedServicing : True PendingComputerRenameDomainJoin : False 
PendingFileRenameOperations : False PendingFileRenameOperationsValue : SystemCenterConfigManager : WindowsUpdateAutoUpdate : True IsRebootPending : True

Через PowerShell Remoting можно проверить, нужна ли перезагрузка на удаленном компьютере:

Invoke-Command -ComputerName s-dc01 -ScriptBlock {Test-PendingReboot}

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

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired
  • HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
  • HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations2

Например, можно проверить наличие записи об ожидающей перезагрузке командой:

Get-Item 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' -ErrorAction SilentlyContinue

Параметр реестра RebootPending

Наличие параметра в ветке RebootRequired указывает, что хосту нужна перезагрузка.

Проверит, требует ли Windows перезагрузки по реестру

Ниже показан пример PowerShell функции, которая позволяет проверить наличие параметров в этих ветках реестра.
function Get-PendingReboot {
param([string[]]$ComputerName = "localhost")
foreach ($Computer in $ComputerName) {
$HKLM = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer)
$CBS = $HKLM.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending')
$WU = $HKLM.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired')
$SM = $HKLM.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager')
$Rename = $SM.GetValue('PendingFileRenameOperations')
$Rename2 = $SM.GetValue('PendingFileRenameOperations2')
[PSCustomObject]@{
Computer = $Computer
RebootNeeded = [bool]($CBS -or $WU -or $Rename -or $Rename2)
}
}
}

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

Get-PendingReboot "s-fs01","s-dc01","s-dc02","s-dc03"

Проверить компьютеры в сети, нужна ли им перезагрузка

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

Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)