TGViewer
Системный Администратор Windows Системный Администратор Windows @win_sysadmin · 3.1K subscribers
Post #242 1.08K
👋 Привет, админы!

На днях поймал «скрытый» источник проблем: сервер вроде живой, патчи ставятся, но после обновлений часть софта ведёт себя странно. Виновник - ожидающая перезагрузка (pending reboot), про которую забыли. Решил поделиться быстрой проверкой по паре десятков машин.

🔥 Функция PowerShell, которая показывает признаки pending reboot локально или удалённо (через WinRM):


function Test-PendingReboot {
[CmdletBinding()]
param(
[string[]]$ComputerName = $env:COMPUTERNAME
)

Invoke-Command -ComputerName $ComputerName -ScriptBlock {
$cbs = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'
$wu = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'

$pfr = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' `
-Name 'PendingFileRenameOperations' -ErrorAction SilentlyContinue
).PendingFileRenameOperations
$pendingFile = ($pfr -is [array] -and $pfr.Count -gt 0) -or ($pfr -is [string] -and $pfr.Length -gt 0)

$rename = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName' `
-Name 'ComputerName' -ErrorAction SilentlyContinue
).ComputerName -ne
(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName' `
-Name 'ComputerName' -ErrorAction SilentlyContinue
).ComputerName

[PSCustomObject]@{
ComputerName = $env:COMPUTERNAME
CBS = $cbs
WindowsUpdate = $wu
PendingFile = $pendingFile
Rename = $rename
Pending = $cbs -or $wu -or $pendingFile -or $rename
}
} | Sort-Object Pending -Descending, ComputerName
}


⚙️ Пример использования по списку серверов и экспорт в отчёт:


$servers = 'srv01','srv02','srv03'
Test-PendingReboot -ComputerName $servers |
Tee-Object -FilePath .\PendingReboot.csv


💡Аккуратный перезапуск только тех, у кого Pending -eq $true (сначала обязательно с -WhatIf!):


$toReboot = Test-PendingReboot -ComputerName $servers | Where-Object Pending
$toReboot.ComputerName | Restart-Computer -Force -Wait -For PowerShell -Timeout 600 -Delay 5 -WhatIf


Итог: такой мини-аудит часто спасает от «мистики» после патчей и помогает планировать окна на рестарт.

💬 А вы как отслеживаете pending reboot в проде - через Zabbix/PRTG, скриптами по расписанию или отдаёте это WSUS/Intune? Поделитесь практикой!

👉 @win_sysadmin
  • 👍 6
  • 🔥 1
More from @win_sysadmin
  1. Sep 24, 2026👋 Привет, админы! Иногда нужно быстро понять — кто и когда логинился на сервер или важную…
  2. Sep 21, 2026👋 Привет, админы! Из жизни. На продакшн-сервере упал веб-сервис, выяснилось, что SSL-серт…
  3. Sep 16, 2026👋 Привет, админы! Сегодня расскажу про простой, но очень полезный трюк, который помогает…
  4. Sep 14, 2026👋 Привет, админы! На прошлой неделе в нашем кластере файловых серверов неожиданно начал б…
  5. Sep 11, 2026👋 Привет, админы! Как быстро проверить, какие пользователи имеют права администратора на…
  6. Sep 8, 2026👋 Привет, админы! Вспоминаю случай, когда утром в понедельник один из наших веб-сервисов…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →