При установке патчей Windows часто требуется перезагрузка. Если её откладывают, система помечает хост как PendingReboot и может "зависнуть" в этом состоянии недели. Ниже - два способа проверить статус - через готовый модуль и напрямую в реестре.
1. Модуль PendingReboot (PowerShell Gallery)
Install-Module -Name PendingReboot # один раз
Test-PendingReboot # простая проверка
Test-PendingReboot -Detailed # причины (WU, CBS и т.п.)
Пример вывода
ComponentBasedServicing : True
WindowsUpdateAutoUpdate : True
IsRebootPending : True
Через PowerShell Remoting проверяем удалённый сервер:
Invoke-Command -ComputerName s-dc01 -ScriptBlock { Test-PendingReboot }
2. Проверка реестра (без дополнительных модулей)
Наличие ключей - признак необходимости перезагрузки:
| Путь в реестре | Что означает |
|---|---|
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending |
CBS‑операция |
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired |
Обновление Windows |
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations |
Ожидание переименования файлов |
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations2 |
Аналогично |
Пример функции
function Get-PendingReboot {
param([string[]]$ComputerName = "localhost")
foreach ($c in $ComputerName) {
$hk = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$c)
$cbs = $hk.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending')
$wu = $hk.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired')
$sm = $hk.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager')
$r1 = $sm.GetValue('PendingFileRenameOperations')
$r2 = $sm.GetValue('PendingFileRenameOperations2')
[pscustomobject]@{
Computer = $c
RebootNeeded = [bool]($cbs -or $wu -or $r1 -or $r2)
}
}
}
Запуск на нескольких узлах:
Get-PendingReboot "s-fs01","s-dc01","s-dc02","s-dc03"
Что делать, если статус "застрял"
Если Windows постоянно требует перезагрузки из‑за ошибки, можно удалить соответствующие ключи вручную (через reg delete ...) или воспользоваться Reset-ComputerMachinePassword / wuauclt /detectnow для принудительного применения обновлений. После этого статус обычно исчезает.
