Saber cuándo reiniciar su computadora es obvio, pero ¿cómo saber si una computadora remota necesita reiniciarse? Podría ser muy útil para un administrador de sistemas saber qué servidor o estación de trabajo está pendiente de reinicio, ya sea para finalizar una actualización de Windows normal o una nueva instalación de software.
Hay algunas claves de registro esparcidas en la bandeja del sistema para marcar un reinicio pendiente. Aquí hay dos de ellos:
los ReiniciarPending clave en:
HKLMSoftwareWindowsCurrentVersionComponent Based Servicing
Y el Reinicio requerido clave bajo:
HKLMSoftwareWindowsCurrentVersionWindowsUpdateAuto Update
Si alguna de las claves existe en su ubicación respectiva, es necesario reiniciar esa computadora. Y PowerShell es bastante capaz de verificar su existencia con una sola línea como la siguiente:
Test-Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionComponent Based ServicingRebootPending'
O
Test-Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto UpdateRebootRequired'
Regresando Cierto significa que su computadora local necesita reiniciarse.

Para ejecutar el mismo cmdlet en una computadora remota, necesitará ayuda de Invocar-Comando, tal como:
$command = {Test-Path 'HKLM:SOFTWAREMicrosoftWindowsCurrentVersionComponent Based ServicingRebootPending'} Invoke-Command -computer ComputerName -ScriptBlock $command

Obviamente, para tener una ejecución exitosa de Invoke-Command, necesita PSRemoting / WinRM habilitado en la computadora remota.
Enlazando todos juntos, aquí está el fragmento que puede usar para verificar y saber si una computadora remota necesita reiniciarse para terminar lo que ha estado haciendo.
$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
}
El resultado se verá así:

Por último, gracias a 4sysops por compartir la idea. Sin embargo, tuve problemas para usar su código, así que tomé una ruta diferente para obtener el mismo resultado.