Cómo saber si una computadora remota con Windows 10 necesita reiniciarse

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.

imagen 8 600x135 - Cómo saber si una computadora remota 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
image 9 600x55 - Cómo saber si una computadora remota necesita reiniciarse

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í:

image 11 600x286 - Cómo saber si una computadora remota necesita reiniciarse

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.

Deja un comentario