Cómo instalar y administrar actualizaciones de Windows mediante PowerShell (PSWindowsUpdate)

Si intentas administrar las actualizaciones de Windows desde la línea de comandos, el módulo PSWindowsUpdate de PowerShell es muy práctico. Te permite escanear, descargar, instalar e incluso ocultar o eliminar actualizaciones sin necesidad de modificar la interfaz gráfica. Resulta especialmente útil si buscas un enfoque basado en scripts, si trabajas con servidores Windows o si trabajas de forma remota.

Contenido:

Instalación del módulo PSWindowsUpdate

Todo comienza con la instalación del módulo desde la Galería de PowerShell. Ejecute este comando en una ventana de administración de PowerShell:

Install-Module -Name PSWindowsUpdate -Force

Quizás se le pregunte si confía en el repositorio; simplemente escriba Y y presione Enter. Después, compruebe si está instalado ejecutando:

Get-Package -Name PSWindowsUpdate

Si estás en una PC o un servidor súper bloqueado, es posible que primero debas ajustar la política de ejecución:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force

En algunos casos, especialmente en versiones anteriores de Windows o si trabajas en entornos sin conexión, podrías necesitar descargar el módulo manualmente o transferir los archivos, pero la mayoría de las veces no es necesario. Una vez instalado, puedes importarlo a tu sesión:

Import-Module PSWindowsUpdate

Y confirma que tienes los comandos correctos disponibles:

Get-Command -Module PSWindowsUpdate

Escanee y descargue actualizaciones de Windows con PowerShell

Para ver qué actualizaciones son necesarias, ejecute:

Get-WindowsUpdate

o el alias:

Get-WUList

Esto mostrará una lista de las actualizaciones pendientes. La primera vez, podría aparecer un error como « El valor no está dentro del rango esperado». No se sabe con certeza por qué ocurre (probablemente algún problema del registro o de algún componente), pero restablecer los componentes de Windows Update suele ser útil. Puedes hacerlo ejecutando:

Reset-WUComponents -Verbose

Este comando restablece el agente, vuelve a registrar las DLL y restaura el servicio WUServer a sus valores predeterminados, lo que básicamente le da al sistema de actualización un nuevo comienzo. Vale la pena probarlo si las comprobaciones de actualización presentan errores.

Para confirmar desde dónde obtiene Windows Update (servidores de Microsoft o un servidor WSUS), intente esto:

Get-WUServiceManager

Si ve entradas que apuntan a un servidor WSUS local (como el ejemplo con http://MN-WSUS:8530 ), su configuración está configurada para actualizaciones internas, no para Microsoft directamente.

Y si desea ver actualizaciones de Microsoft Update (que incluye Office, controladores, etc.), debe agregar ese servicio explícitamente:

Add-WUServiceManager -ServiceID "7971f918-a847-4430-9279-4a52d1efe18d" -AddServiceFlag 7

A veces, es posible que quieras ignorar ciertas categorías de actualizaciones, como controladores o KB específicos. Usar:

Get-WUlist -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KB4489873

Y si simplemente estás intentando obtener todas las actualizaciones disponibles sin instalarlas todavía, ejecuta:

Get-WindowsUpdate -Download -AcceptAll

Esto se descarga, pero no se instala; las actualizaciones llegan en [Nombre del archivo] C:\Windows\SoftwareDistribution\Download.Útil si desea revisar o extender el proceso de instalación.

Instalación de actualizaciones de Windows con PowerShell

Una vez que hayas descargado las actualizaciones, o si simplemente deseas instalar todo en el sistema, automatiza la instalación con:

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot

Esto inicia todas las actualizaciones disponibles, acepta los acuerdos de licencia y reinicia el sistema si es necesario.¿Desea programar un reinicio o evitar el reinicio automático? Otras opciones incluyen IgnorarReinicio o ProgramarReinicio con horarios específicos.

También puede mantener un registro de lo que se hizo, lo cual es útil para solucionar problemas o fines de auditoría:

Install-WindowsUpdate -AcceptAll -Install -AutoReboot | Out-File "C:\Logs\Update-$(Get-Date -Format yyyy-MM-dd).txt"

Por último, si solo desea instalar actualizaciones de Knowledge Base específicas, simplemente especifique sus ID:

Get-WindowsUpdate -KBArticleID KB2267602, KB4533002 -Install

Y, si necesita omitir ciertas actualizaciones, incluya -NotCategory, -NotTitle o -NotKBArticleID :

Install-WindowsUpdate -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot

Úselo Get-WURebootStatuspara comprobar si hay un reinicio pendiente o programado:

Get-WURebootStatus | Select RebootRequired, RebootScheduled

Comprobar el historial de actualizaciones de Windows con PowerShell

¿Quieres ver lo que ya se ha instalado? Usa:

Get-WUHistory

Y para saber cuándo se instaló una KB en particular:

Get-WUHistory | Where-Object {$_. Title -match "KB4517389"} | Format-Table

O bien, verifique los tiempos del último escaneo o instalación exitosos:

Get-WULastResults | Select-Object LastSearchSuccessDate, LastInstallationSuccessDate

Desinstalar actualizaciones de Windows con PowerShell

Si un parche está causando problemas, puedes eliminarlo mediante su número de KB:

Remove-WindowsUpdate -KBArticleID KB4489873 -NoRestart

Sin embargo, tenga cuidado: la desinstalación a veces puede alterar las dependencias, pero funciona bien para eliminar actualizaciones problemáticas.

Ocultar o mostrar actualizaciones de Windows mediante PowerShell

Para ocultar una actualización (como una actualización de controlador que desea omitir), ejecute:

$HideList = "KB4489873", "KB4489243" Get-WindowsUpdate -KBArticleID $HideList -Hide

Y para verificar actualizaciones ocultas:

Get-WindowsUpdate -IsHidden

Esto muestra las actualizaciones marcadas como ocultas con una H en el estado. Si decides mostrarlas, simplemente ejecuta:

Get-WindowsUpdate -KBArticleID $HideList -Hidden -Hide:$false

Instalar actualizaciones de Windows en equipos remotos con PowerShell

Para administrar varias máquinas remotamente, necesitará tener WinRM habilitado y configurado (a veces puede ser un fastidio si no lo está).Una vez resuelto esto, puede ejecutar comandos como:

Invoke-Command -ComputerName "server1", "server2" -ScriptBlock { Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force Import-Module PSWindowsUpdate Enable-WURemoting } Invoke-Command -ComputerName "server1", "server2" -ScriptBlock { Install-WindowsUpdate -AcceptAll -AutoReboot }

O programe actualizaciones para que se realicen en un momento específico agregando -TriggerDate, lo cual es útil si está tratando de no interrumpir a los usuarios durante las horas de trabajo.

Para comprobar rápidamente el estado de actualización en sistemas remotos, puede ejecutar:

Get-WUHistory -ComputerName "server1" | Where-Object {$_. Title -match "KB404"}

Todo este módulo realmente acelera las cosas para la administración masiva, especialmente cuando se trata de un montón de servidores Windows o configuraciones centrales sin GUI.

Muchos usuarios informan que, a veces, estos comandos no funcionan correctamente la primera vez, especialmente en configuraciones nuevas o después de cambiar las políticas. Sin embargo, ejecutarlos de nuevo o reiniciar el servidor suele solucionar el problema. La clave es comprobar siempre el estado actual antes de intentar instalar o desinstalar nada.

Resumen

Administrar actualizaciones mediante PowerShell con PSWindowsUpdate no siempre es fácil, pero es *mucho* más flexible que usar el comando «clic» para cambiar de sitio. Si estos comandos no funcionan de inmediato, suele ser suficiente restablecer los componentes y reimportar los módulos. Tenga en cuenta que algunos comandos requieren derechos de administrador y una configuración remota adecuada para la administración remota.

Resumen

  • PSWindowsUpdate instalado con el módulo de instalación
  • Buscar actualizaciones: Get-WindowsUpdate / Get-WUList
  • Descargar actualizaciones: Get-WindowsUpdate -Descargar
  • Instalar actualizaciones: Install-WindowsUpdate
  • Consultar historial: Get-WUHistory
  • Desinstalar u ocultar actualizaciones según sea necesario
  • Administre actualizaciones en máquinas remotas con Invoke-Command y Enable-WURemoting

Reflexiones finales

Sinceramente, estos comandos no son perfectos; a veces generan errores sin motivo. Pero son una gran ayuda al automatizar la aplicación de parches o la resolución de problemas de actualizaciones en masa. Sin duda, vale la pena familiarizarse con ellos si se administran varios hosts de Windows. Ojalá esto ayude a alguien a ahorrarse algunas horas o dolores de cabeza.