Tras instalar ciertos parches o actualizaciones de seguridad en Windows, a menudo es necesario reiniciar el equipo para que los cambios surtan efecto. Si se retrasa el reinicio o si los reinicios automáticos están deshabilitados (especialmente en servidores o entornos empresariales mediante directivas de grupo), el equipo podría quedarse con las actualizaciones instaladas pero sin aplicar. Este estado de reinicio pendiente puede causar muchos problemas, como actualizaciones que aparecen como pendientes indefinidamente o anomalías en el sistema. Por lo tanto, es muy útil saber cómo identificar qué equipos están esperando un reinicio después de las actualizaciones. Sobre todo si se administran varios servidores o estaciones de trabajo, detectar estos reinicios pendientes puede ahorrar mucho tiempo.
En un caso reciente, un servidor Windows mostraba que las actualizaciones estaban instaladas, pero aún no se había reiniciado automáticamente. La ventana de estado de las actualizaciones indicaba «Reinicio pendiente», pero por alguna razón, hacer clic en reiniciar no era suficiente. Así que investigué scripts y comandos para obtener una visión más clara. Resulta que el módulo PendingReboot de Microsoft, disponible en la Galería de PowerShell, puede indicar si un sistema está esperando reiniciarse. Es algo peculiar, pero funciona bastante bien, incluso en máquinas remotas con acceso remoto a PowerShell habilitado.
Cómo comprobar si un ordenador necesita reiniciarse en Windows
Método 1: Usar el módulo de PowerShell PendingReboot
Instalar este módulo es muy sencillo y ayuda a reducir considerablemente las comprobaciones manuales, especialmente en una red. Simplemente ejecute esto en una consola de PowerShell con privilegios de administrador:
Install-Module -Name PendingReboot
En algunas configuraciones, es posible que primero tengas que establecer la política de ejecución, como por ejemplo Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. No hay problema, solo es un aviso. Una vez instalado, puedes comprobar rápidamente si una máquina local necesita reiniciarse:
Test-PendingReboot
Este comando devuelve Verdadero o Falso; si es Verdadero, la máquina necesita reiniciarse. Para obtener información más detallada, agregue -Detailed:
Test-PendingReboot -Detailed
Te indicará exactamente qué está causando la demora, ya sea una actualización pendiente de Windows, el mantenimiento de componentes u otros motivos. La mayoría de las veces, esto también funciona para máquinas remotas con un simple comando Invoke-Command.¿Necesitas comprobar un servidor de forma remota? Prueba con:
Invoke-Command -ComputerName m-dc01 -ScriptBlock {Test-PendingReboot}
Nota: Para que esto funcione, es necesario que la función de acceso remoto de PowerShell esté habilitada y configurada en la máquina de destino.
Método 2: Comprobar manualmente las claves del registro
Si desea omitir los módulos de PowerShell o tiene problemas con ellos, examinar el registro es un buen plan B. Ciertas claves del registro indican reinicios pendientes:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPendingHKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequiredHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperationsHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations2
Para comprobarlo, puedes ejecutar comandos como:
Get-Item 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' -ErrorAction SilentlyContinue
Si existe esta entrada en el registro, Windows cree que aún es necesario reiniciar el sistema. No es de extrañar que siga avisándote.
Aquí tienes una función rápida de PowerShell que agrupa varias de estas comprobaciones del registro, una especie de solución integral para el estado del reinicio:
function Get-PendingReboot { param([string[]]$ComputerName = "localhost") foreach ($Computer in $ComputerName) { $HKLM = [Microsoft. Win32. RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer) $CBS = $HKLM. OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending') $WU = $HKLM. OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired') $SM = $HKLM. OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager') $Rename = $SM. GetValue('PendingFileRenameOperations') $Rename2 = $SM. GetValue('PendingFileRenameOperations2') [PSCustomObject]@{ Computer = $Computer RebootNeeded = [bool]($CBS -or $WU -or $Rename -or $Rename2) } } }
En una red, ejecutar esto ayudó a detectar varias máquinas con reinicios pendientes que, de otro modo, habrían pasado desapercibidos. Tenga en cuenta que el acceso remoto al registro y la comunicación remota deben estar habilitados y funcionando correctamente para que esto funcione.
Y si Windows sigue pidiendo reiniciar después de que fallen las actualizaciones, es posible que tengas que cancelar o restablecer manualmente esas actualizaciones pendientes para evitar reinicios constantes. Normalmente, borrar la caché o eliminar manualmente esas entradas del registro ayuda, pero esa es otra historia.
En definitiva, estos métodos deberían facilitar mucho el seguimiento de los sistemas que necesitan reiniciarse, evitando problemas inesperados durante las actualizaciones y garantizando un funcionamiento fluido. El problema recurrente de las actualizaciones instaladas pero sin reinicio es molesto, pero estos trucos resultan bastante fiables una vez que se conocen.
Resumen
- Instale el módulo PendingReboot de PowerShell para comprobar el estado del reinicio.
- Utilice comandos como
Test-PendingRebootpara realizar comprobaciones de salud rápidas. - Compruebe las claves del registro si los módulos no son una opción.
- Utilice la comunicación remota de PowerShell (con
Invoke-Command) para evaluar rápidamente las máquinas remotas.
Resumen
Con suerte, saber cómo identificar reinicios pendientes hará que la administración del sistema sea un poco menos frustrante. Estas técnicas son bastante útiles para una comprobación rápida en varios dispositivos; a veces se trata simplemente de detectar esas actualizaciones que no se completaron del todo.¡Ojalá esto ayude a agilizar tu proceso de actualización!