Knowing when to reboot your computer is obvious but how to tell if a remote computer needs a reboot? It could be quite useful to a sysadmin to know which server or workstation is pending for a reboot, whether to finish up a regular Windows Update or a new software installation.

There are a few registry keys scattered in the system tray to flag a pending reboot. Here are two of them:

The RebootPending key at:

HKLMSoftwareWindowsCurrentVersionComponent Based Servicing

And the RebootRequired key under:

HKLMSoftwareWindowsCurrentVersionWindowsUpdateAuto Update

If any of the keys exists in their respective location, a reboot is needed for that computer. And PowerShell is pretty capable of checking their existence with a single line like below:

Test-Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionComponent Based ServicingRebootPending'


Test-Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto UpdateRebootRequired'

Returning True means your local computer needs a reboot.

To execute the same cmdlet on a remote computer, you will need help from Invoke-Command, such as:

$command = {Test-Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionComponent Based ServicingRebootPending'}
Invoke-Command -computer ComputerName -ScriptBlock $command

Obviously, in order to have a successful Invoke-Command execution, you need PSRemoting/WinRM enabled on the remote computer.

Binding all together, here is the snippet that you can use to check and tell if a remote computer needs a reboot to finish up what it’s been doing.

$pendingReboot = @( @{ Name = 'Reboot Pending Status: ' Test = { Test-Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionComponent Based ServicingRebootPending'} } @{ Name = 'Reboot Required by Windows Update: ' Test = { Test-Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto UpdateRebootRequired'} })
$computername = "ComputerName"
$session = New-PSSession -Computer $computername
foreach ($test in $pendingReboot) { $result = Invoke-Command -Session $session -ScriptBlock $test.Test $test.Name + $result

The result will look like this:

Lastly, thanks to 4sysops for sharing the idea. However, I had trouble using their code so I took a different route to get the same result.

The post How To Tell If A Remote Computer Needs Reboot appeared first on Next of Windows.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: