🔄 Actualizaciones de Windows: Por qué son críticas y cómo automatizarlas en 2026

Actualizaciones de Windows: WannaCry tenía parche disponible 59 días antes y aun así infectó 200.000 equipos
Las actualizaciones de Windows son la primera barrera frente a vulnerabilidades activamente explotadas: WannaCry infectó 200.000 equipos en 150 países en 2017 usando un fallo para el que existía parche disponible 59 días antes. En Seguridad en mi PC documentamos cómo desde 2021 el tiempo medio entre la publicación de una vulnerabilidad y su explotación activa se mide en días, y cómo tres métodos de Windows y PowerShell pueden automatizar el parcheo completo sin intervención manual. Todas las guías para mantener tu sistema protegido están en nuestra sección de actualizaciones y seguridad de Windows, y puedes consultar también el catálogo completo de guías de Windows Update y seguridad Windows disponibles en el sitio.
💡 Resumen rápido
🔄 Actualizaciones de Windows: por qué son críticas y cómo automatizarlas en 2026
Las actualizaciones de Windows son parches de seguridad que Microsoft publica para corregir vulnerabilidades CVE antes de que los atacantes las exploten. WannaCry infectó 200.000 equipos en 150 países en 2017 explotando una vulnerabilidad con parche disponible 59 días antes. Desde 2021 la ventana de explotación entre publicación de un CVE y su uso activo se mide en días.
- ✅ 5 tipos de actualizaciones: seguridad, acumulativas, características, drivers y opcionales
- ✅ Casos reales: WannaCry (CVE-2017-0144) y PrintNightmare (CVE-2021-34527)
- ✅ 3 métodos para automatizar: Configuración de Windows, programar reinicios y PSWindowsUpdate en PowerShell
- ✅ Script PowerShell con 3 tareas programadas: vigilancia automática en inicio, logon y cada hora
- ✅ Buenas prácticas: no retrasar parches críticos del Patch Tuesday, reiniciar cuando se solicite y verificar drivers
📅 2026 · 🕐 8 minutos de lectura
Las actualizaciones de Windows son esenciales para corregir vulnerabilidades, mejorar el rendimiento y proteger el sistema frente a virus, malware y ataques informáticos. En esta guía aprenderás a gestionar el ciclo de parcheo correctamente, automatizarlo con PowerShell y entender por qué no aplicar los parches a tiempo puede ser catastrófico. Es un tema que cubrimos también en nuestra sección de ciberseguridad y en todos los contenidos etiquetados como ciberseguridad.
Las actualizaciones de Windows son la base de cualquier estrategia de gestión de vulnerabilidades. Complementa esta guía con el hardening de Windows 11 y la correcta configuración de Windows Defender.
📌 ¿Por qué son importantes las actualizaciones de Windows?
Aplicar los parches de seguridad a tiempo cierra vulnerabilidades CVE antes de que los atacantes las exploten masivamente. Un CVE (Common Vulnerabilities and Exposures) sin parchear es una vulnerabilidad conocida, documentada y con exploits disponibles en repositorios públicos: el único paso que separa al atacante del sistema es que el administrador no haya aplicado el parche de seguridad correspondiente.
- ✔ Cierran vulnerabilidades CVE antes de que sean explotadas masivamente por ransomware o actores APT
- ✔ Reducen la ventana de explotación; sin parche, cualquier CVE publicado es un vector activo desde el primer día
- ✔ Mejoran la estabilidad del sistema operativo y corrigen errores (bugs) en componentes críticos
- ✔ Actualizan controladores (drivers) y firmware del hardware con correcciones de seguridad
- ✔ Añaden mejoras en Microsoft Defender y otros componentes de seguridad integrados en Windows
💡 ¿Qué es el Patch Tuesday?
El Patch Tuesday es el ciclo oficial de publicación de parches de Microsoft: cada segundo martes del mes, la empresa publica de forma coordinada todas las actualizaciones de seguridad del período. Este ciclo predecible permite a administradores de sistemas planificar el proceso de parcheo y pruebas antes del despliegue. Para vulnerabilidades críticas con explotación activa confirmada, Microsoft puede publicar parches fuera de banda (out-of-band) de carácter urgente sin esperar al siguiente Patch Tuesday.
🚨 Riesgos de no aplicar las actualizaciones de Windows
| Caso real | CVE / Vulnerabilidad | Parche disponible | Ventana de exposición | Impacto documentado |
|---|---|---|---|---|
| WannaCry (2017) | CVE-2017-0144 SMBv1 EternalBlue (CVSS 9.3) | MS17-010, 59 días antes | 2 meses sin parchear | 200.000 equipos en 150 países, hospitales paralizados |
| NotPetya (2017) | CVE-2017-0144 SMBv1 EternalBlue (CVSS 9.3) | MS17-010, 90 días antes | 3 meses sin parchear | 10.000 millones de dólares en daños globales |
| PrintNightmare (2021) | CVE-2021-34527 Print Spooler (CVSS 8.8) | Parche de emergencia fuera de banda | Días hasta el parche urgente | Escalada a SYSTEM en cualquier Windows sin parchear |
| Log4Shell (2021) | CVE-2021-44228 Log4j (CVSS 10.0) | Parche en 24 h, explotación en horas | Horas sin parchear | Millones de servidores expuestos globalmente |
💡 ¿Qué es una vulnerabilidad zero-day?
Una vulnerabilidad zero-day es un fallo de seguridad desconocido para el fabricante del software en el momento en que es descubierto o explotado activamente. El término "zero-day" refleja que el fabricante tiene cero días de margen para reaccionar: no existe parche disponible y el sistema queda expuesto hasta que Microsoft publica una corrección, a veces mediante un parche fuera de banda urgente. Los zero-days activos son el escenario más peligroso porque ningún ciclo de parcheo puede resolverlos hasta que el fabricante los conoce.
⚙️ Tipos de actualizaciones disponibles en Windows
| Tipo | Descripción | Frecuencia | Identificador | Prioridad |
|---|---|---|---|---|
| Actualizaciones de seguridad | Corrigen vulnerabilidades CVE con puntuación CVSS asignada | Mensual (Patch Tuesday) | KB + número | 🔴 Crítica |
| Actualizaciones acumulativas | Paquete que incluye todos los parches anteriores del mes | Mensual | KB + número | 🔴 Alta |
| Parches fuera de banda | Correcciones de emergencia para CVEs con explotación activa | Bajo demanda | KB urgente | 🔴 Máxima urgencia |
| Actualizaciones de características | Nuevas funciones y versión del sistema operativo | Anual | Versión 24H2… | 🟡 Media |
| Actualizaciones de drivers | Controladores de hardware con correcciones de seguridad y rendimiento | Variable | KB + número | 🟠 Media-alta |
| Actualizaciones opcionales | Mejoras no críticas y correcciones menores de calidad | Variable | KB + número | 🟡 Baja |
🔐 ¿Cómo gestionar y automatizar Windows Update?
🛠️ Método 1: Activar actualizaciones automáticas
- Abre Configuración → Windows Update
- Activa Actualizaciones automáticas para que el ciclo de parcheo se ejecute sin intervención manual
- Configura Horas activas para evitar reinicios durante el trabajo
- Activa también Recibir actualizaciones de otros productos de Microsoft para parchear Office, Defender y otros componentes
⏰ Método 2: Programar reinicios para no interrumpir el trabajo
- Ve a Configuración → Windows Update → Opciones avanzadas
- Configura un horario de reinicio fuera de tus horas de trabajo para completar la instalación de parches pendientes
- Activa Notificarme cuando sea necesario reiniciar para no dejar actualizaciones a medias
💻 Método 3: Automatizar con PowerShell y PSWindowsUpdate
El módulo PSWindowsUpdate permite gestionar el ciclo de parcheo completo desde la línea de comandos, con control detallado sobre qué actualizaciones instalar y verificación del historial de actualizaciones:
# Instalar modulo PSWindowsUpdate (solo primera vez, requiere PowerShell como administrador) Install-Module PSWindowsUpdate -Force # Ver actualizaciones de Windows pendientes con su KB y descripcion Get-WindowsUpdate # Instalar todas las actualizaciones de Windows automaticamente con reinicio si es necesario Install-WindowsUpdate -AcceptAll -AutoReboot # Verificar el historial de actualizaciones instaladas (ultimas 20) Get-WUHistory | Select-Object -First 20 | Format-Table Date, Title, Status
⚙️ Script completo: Vigilancia automática de Windows Update con tareas programadas
A continuación encontrarás un script PowerShell completo y unificado que no fuerza instalaciones agresivas, sino que vigila el estado del ciclo de parcheo y alerta cuando algo no está bien: si alguien ha deshabilitado el servicio Windows Update, si hay un reinicio pendiente sin aplicar desde hace días, si pasan más de 45 días sin recibir parches o si quedan actualizaciones pendientes de instalar. Esta estrategia es la más segura: el ciclo oficial de Windows Update sigue encargándose del parcheo, pero tú tienes trazabilidad completa de su funcionamiento mediante tres tareas programadas que se ejecutan en cada inicio del equipo, en cada inicio de sesión y cada hora.
Install-WindowsUpdate -AutoReboot de forma agresiva sería contraproducente (reiniciaría el equipo mientras trabajas). Este script adopta el enfoque profesional: vigila que el servicio wuauserv esté activo y en modo automático, detecta si alguien lo ha deshabilitado, lista actualizaciones pendientes, avisa si llevas más de 45 días sin parchear y registra todo en un CSV histórico. El parcheo real lo sigue haciendo Windows Update por su ciclo oficial, pero sabes al momento si algo falla.📅 Tareas programadas que crea este script
El script registra tres tareas independientes en el Programador de tareas de Windows. Cada una se ejecuta en un disparador distinto para garantizar la cobertura completa de la vigilancia del ciclo de parcheo:
| Nombre de la tarea | Disparador | Frecuencia | Propósito |
|---|---|---|---|
Update-Check-Inicio | Al iniciar Windows (-AtStartup) | Cada arranque del equipo | Verifica que wuauserv y BITS no hayan sido deshabilitados; los reactiva en modo manual si alguien los ha tocado durante el apagado |
Update-Check-Logon | Al iniciar sesión cualquier usuario (-AtLogOn) | Cada login (incluye reinicios desde sesión) | Comprueba si hay reinicio pendiente por actualización instalada y avisa en el log para que el usuario lo aplique |
Update-Check-Horaria | Programado cada hora (-RepetitionInterval 1h) | 24 veces al día | Lista actualizaciones pendientes, calcula días desde el último parche y alerta si supera 45 días sin parchear (señal de problema en el ciclo) |
wuauserv. La carga diaria sobre el sistema es marginal (24 consultas de unos segundos cada una) y si usas conexión con cuota de datos, el consumo total ronda los pocos MB al día.📥 Pasos para instalar y activar la vigilancia automática
- Abre PowerShell como administrador: pulsa la tecla Windows, escribe
PowerShell, haz clic derecho sobre Windows PowerShell y selecciona Ejecutar como administrador. - Permite la ejecución de scripts en la sesión actual (no afecta a futuras sesiones):
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass - Crea la carpeta de scripts del sistema: el script se instalará en
C:\Scripts\para que las tareas programadas lo encuentren siempre en la misma ruta:New-Item -ItemType Directory -Path "C:\Scripts" -Force - Crea el archivo del script: abre el Bloc de notas, pega el código que verás más abajo y guárdalo como
Update-Check.ps1directamente enC:\Scripts\. Asegúrate de que el tipo de archivo sea Todos los archivos, no .txt. - Ejecuta el script por primera vez desde PowerShell (esto hará la primera verificación Y creará las tres tareas programadas):
C:\Scripts\Update-Check.ps1 - Verifica que las tres tareas programadas se crearon correctamente:
Get-ScheduledTask -TaskName "Update-Check-*" - Revisa el log y el CSV histórico:
C:\Logs\update-check.logcontiene los resultados detallados yC:\Logs\update-check-historico.csvel resumen de cada ejecución. - Reinicia el equipo: la tarea de inicio se ejecutará automáticamente y la vigilancia quedará activa 24/7.
💻 Script de vigilancia de Windows Update (copia y pega)
# ============================================================
# Script: Vigilancia de Windows Update + 3 tareas programadas
# Autor: seguridadenmipc.com
# Compat: Windows 10 / 11 / Server 2019+
# Uso: Ejecutar como administrador (1a vez)
# Despues se ejecuta solo: inicio, logon y cada hora
# Ruta: C:\Scripts\Update-Check.ps1
# Objetivo: NO fuerza instalaciones. Solo vigila el estado
# de Windows Update y avisa si algo esta mal.
# ============================================================
# 1. Verificar privilegios de administrador
if (-not ([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "[X] Ejecuta este script como Administrador." -ForegroundColor Red
exit
}
# 2. Preparar log y CSV historico
$logDir = "C:\Logs"
if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir | Out-Null }
$log = "$logDir\update-check.log"
$csv = "$logDir\update-check-historico.csv"
Start-Transcript -Path $log -Append | Out-Null
$disparador = if ($args[0]) { $args[0] } else { "Manual" }
Write-Host "=== Vigilancia de Windows Update ===" -ForegroundColor Cyan
Write-Host "Fecha: $(Get-Date) | Disparador: $disparador" -ForegroundColor Gray
# 3. Verificar servicios criticos de Windows Update
Write-Host "`n--- Estado de servicios ---" -ForegroundColor Yellow
$serviciosCriticos = @{
"wuauserv" = "Windows Update"
"BITS" = "Background Intelligent Transfer Service"
"UsoSvc" = "Update Orchestrator"
"cryptsvc" = "Cryptographic Services"
}
$serviciosMal = 0
foreach ($svc in $serviciosCriticos.Keys) {
try {
$s = Get-Service -Name $svc -ErrorAction Stop
$startType = (Get-WmiObject Win32_Service -Filter "Name='$svc'").StartMode
if ($startType -eq "Disabled") {
Write-Host "[!] $($serviciosCriticos[$svc]) DESHABILITADO. Reactivando..." -ForegroundColor Red
Set-Service -Name $svc -StartupType Manual
$serviciosMal++
} else {
Write-Host "[OK] $($serviciosCriticos[$svc]): $($s.Status) / $startType" -ForegroundColor Green
}
} catch {
Write-Host "[X] No se encontro $svc" -ForegroundColor Red
}
}
# 4. Comprobar reinicio pendiente por actualizacion
Write-Host "`n--- Reinicio pendiente ---" -ForegroundColor Yellow
$rebootPending = $false
$keysReboot = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"
)
foreach ($k in $keysReboot) {
if (Test-Path $k) { $rebootPending = $true }
}
if ($rebootPending) {
Write-Host "[!] Hay actualizaciones instaladas pendientes de REINICIO." -ForegroundColor Red
Write-Host " Reinicia el equipo para activar los parches." -ForegroundColor Yellow
} else {
Write-Host "[OK] Sin reinicio pendiente." -ForegroundColor Green
}
# 5. Listar actualizaciones pendientes (consulta, no instala)
Write-Host "`n--- Actualizaciones pendientes ---" -ForegroundColor Yellow
$pendientes = 0
try {
$session = New-Object -ComObject Microsoft.Update.Session
$searcher = $session.CreateUpdateSearcher()
$result = $searcher.Search("IsInstalled=0 and Type='Software'")
$pendientes = $result.Updates.Count
if ($pendientes -gt 0) {
Write-Host "[!] $pendientes actualizaciones pendientes de instalar." -ForegroundColor Yellow
foreach ($u in $result.Updates) {
Write-Host " - $($u.Title)" -ForegroundColor Gray
}
} else {
Write-Host "[OK] Sistema al dia: sin actualizaciones pendientes." -ForegroundColor Green
}
} catch {
Write-Host "[!] No se pudo consultar Windows Update: $_" -ForegroundColor Yellow
}
# 6. Dias desde el ultimo parche instalado
Write-Host "`n--- Ultimo parche instalado ---" -ForegroundColor Yellow
$diasSinParche = 0
$ultimaKB = "N/A"
try {
$ultimoHotfix = Get-HotFix | Where-Object { $_.InstalledOn } |
Sort-Object InstalledOn -Descending | Select-Object -First 1
if ($ultimoHotfix -and $ultimoHotfix.InstalledOn) {
$diasSinParche = (New-TimeSpan -Start $ultimoHotfix.InstalledOn -End (Get-Date)).Days
$ultimaKB = $ultimoHotfix.HotFixID
if ($diasSinParche -gt 45) {
Write-Host "[X] CRITICO: $diasSinParche dias desde el ultimo parche ($ultimaKB)." -ForegroundColor Red
Write-Host " Revisa Windows Update urgentemente." -ForegroundColor Red
} elseif ($diasSinParche -gt 14) {
Write-Host "[!] $diasSinParche dias desde el ultimo parche ($ultimaKB)." -ForegroundColor Yellow
} else {
Write-Host "[OK] Ultimo parche hace $diasSinParche dias: $ultimaKB." -ForegroundColor Green
}
}
} catch { Write-Host "[!] No se pudo consultar el historial: $_" -ForegroundColor Yellow }
# 7. Verificar configuracion de actualizaciones automaticas
Write-Host "`n--- Configuracion de Windows Update ---" -ForegroundColor Yellow
try {
$auOptions = Get-ItemProperty `
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" `
-Name AUOptions -ErrorAction SilentlyContinue
if ($auOptions.AUOptions -eq 1) {
Write-Host "[!] Actualizaciones automaticas DESACTIVADAS manualmente." -ForegroundColor Red
} else {
Write-Host "[OK] Actualizaciones automaticas activas." -ForegroundColor Green
}
} catch {}
# 8. Anadir resumen al CSV historico
$resumen = [PSCustomObject]@{
Fecha = (Get-Date -Format "yyyy-MM-dd HH:mm:ss")
Disparador = $disparador
ServiciosDeshabilit = $serviciosMal
ReinicioPendiente = $rebootPending
ActualizPendientes = $pendientes
DiasSinParche = $diasSinParche
UltimaKB = $ultimaKB
}
$resumen | Export-Csv -Path $csv -Append -NoTypeInformation -Encoding UTF8
Write-Host "[OK] Resumen anadido al CSV historico." -ForegroundColor Green
# 9. CREAR LAS 3 TAREAS PROGRAMADAS (solo si no existen)
$scriptPath = "C:\Scripts\Update-Check.ps1"
# 9a. Tarea: al iniciar Windows
try {
if (-not (Get-ScheduledTask -TaskName "Update-Check-Inicio" -ErrorAction SilentlyContinue)) {
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptPath`" Inicio"
$trigger = New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
-LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries `
-DontStopIfGoingOnBatteries -StartWhenAvailable `
-ExecutionTimeLimit (New-TimeSpan -Minutes 10)
Register-ScheduledTask -TaskName "Update-Check-Inicio" `
-Action $action -Trigger $trigger -Principal $principal -Settings $settings `
-Description "Vigilancia de Windows Update al arranque - seguridadenmipc.com" | Out-Null
Write-Host "[OK] Tarea 'Update-Check-Inicio' creada (al arrancar)." -ForegroundColor Green
} else {
Write-Host "[i] Tarea 'Update-Check-Inicio' ya existe." -ForegroundColor Cyan
}
} catch { Write-Host "[X] Error en tarea Inicio: $_" -ForegroundColor Red }
# 9b. Tarea: al iniciar sesion
try {
if (-not (Get-ScheduledTask -TaskName "Update-Check-Logon" -ErrorAction SilentlyContinue)) {
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptPath`" Logon"
$trigger = New-ScheduledTaskTrigger -AtLogOn
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
-LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries `
-DontStopIfGoingOnBatteries -StartWhenAvailable `
-ExecutionTimeLimit (New-TimeSpan -Minutes 10)
Register-ScheduledTask -TaskName "Update-Check-Logon" `
-Action $action -Trigger $trigger -Principal $principal -Settings $settings `
-Description "Vigilancia de Windows Update al iniciar sesion - seguridadenmipc.com" | Out-Null
Write-Host "[OK] Tarea 'Update-Check-Logon' creada (al iniciar sesion)." -ForegroundColor Green
} else {
Write-Host "[i] Tarea 'Update-Check-Logon' ya existe." -ForegroundColor Cyan
}
} catch { Write-Host "[X] Error en tarea Logon: $_" -ForegroundColor Red }
# 9c. Tarea: cada hora
try {
if (-not (Get-ScheduledTask -TaskName "Update-Check-Horaria" -ErrorAction SilentlyContinue)) {
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptPath`" Horaria"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(10) `
-RepetitionInterval (New-TimeSpan -Hours 1)
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
-LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries `
-DontStopIfGoingOnBatteries -StartWhenAvailable `
-ExecutionTimeLimit (New-TimeSpan -Minutes 10)
Register-ScheduledTask -TaskName "Update-Check-Horaria" `
-Action $action -Trigger $trigger -Principal $principal -Settings $settings `
-Description "Vigilancia de Windows Update cada hora - seguridadenmipc.com" | Out-Null
Write-Host "[OK] Tarea 'Update-Check-Horaria' creada (cada 1h)." -ForegroundColor Green
} else {
Write-Host "[i] Tarea 'Update-Check-Horaria' ya existe." -ForegroundColor Cyan
}
} catch { Write-Host "[X] Error en tarea Horaria: $_" -ForegroundColor Red }
Write-Host "`n[OK] Vigilancia activa. Disparador: $disparador" -ForegroundColor Green
Write-Host " Log: $log" -ForegroundColor Gray
Write-Host " CSV: $csv" -ForegroundColor Gray
Stop-Transcript | Out-Null↩️ Script de reversión (elimina las 3 tareas programadas)
Si necesitas desactivar la vigilancia automática (por ejemplo, para diagnosticar un problema o usar una solución corporativa de gestión de parches), ejecuta este script. Importante: este script no modifica la configuración de Windows Update, solo elimina las tareas de vigilancia y preserva el log y el CSV histórico para consulta posterior.
# ============================================================
# Revertir vigilancia de Windows Update
# ============================================================
# Eliminar las 3 tareas programadas
$tareas = @("Update-Check-Inicio", "Update-Check-Logon", "Update-Check-Horaria")
foreach ($t in $tareas) {
if (Get-ScheduledTask -TaskName $t -ErrorAction SilentlyContinue) {
Unregister-ScheduledTask -TaskName $t -Confirm:$false
Write-Host "[OK] Tarea $t eliminada." -ForegroundColor Green
}
}
Write-Host ""
Write-Host "[OK] Vigilancia desactivada. Tareas programadas eliminadas." -ForegroundColor Green
Write-Host " Nota: Windows Update sigue funcionando con su ciclo oficial." -ForegroundColor Yellow
Write-Host " Logs preservados en C:\Logs\update-check.log" -ForegroundColor Cyan⚠️ Riesgos y efectos reales del script
Este script es uno de los más conservadores de la serie: es de solo lectura con una única acción correctiva. Lee el estado de los servicios, el registro y el historial de parches, y solo interviene si detecta que un servicio crítico de Windows Update ha sido deshabilitado (lo reactiva en modo manual). No fuerza instalaciones, no reinicia el equipo y no modifica la configuración del ciclo de parcheo.
| Función del sistema | ¿Se ve afectada? | Detalle técnico |
|---|---|---|
| Inicio de sesión local | 🟢 No | El script no toca cuentas ni políticas de autenticación |
| Inicio de Windows | 🟢 No | La tarea de inicio se ejecuta en background tras el arranque |
| Reinicio / apagado | 🟢 No | El script NO fuerza reinicios; solo avisa por log si hay reinicio pendiente |
| UEFI / arranque seguro | 🟢 No | No afecta BCD, Secure Boot ni particiones EFI |
| Banca, Gmail y plataformas web | 🟢 No | El script no modifica DNS, hosts, proxy ni red |
| Visualización de sitios web | 🟢 No | Solo consulta COM local de Windows Update, no cambia el navegador |
| Servicios Windows Update (wuauserv, BITS) | 🟢 Sí (positivo) | Si algún servicio está Disabled, el script lo reactiva en modo Manual |
| Configuración de Windows Update | 🟢 No | El script NO modifica políticas, horarios ni frecuencia de parches |
| Instalación de parches | 🟢 No | El script NO ejecuta Install-WindowsUpdate; solo lista pendientes |
| Espacio en disco | 🟡 Mínimo | El log y CSV crecen unos KB por ejecución; revisa C:\Logs\ cada 6 meses (en ejecución horaria, crecerá más rápido que antes) |
| Carga de CPU / red | 🟡 Baja | Cada ejecución dura 5-15 s; 24 consultas diarias al catálogo de Windows Update |
| Software corporativo (WSUS, SCCM, Intune) | 🟡 Posible | Si el equipo usa WSUS/Intune, el script convivirá sin conflicto pero duplicará consultas |
- Si tu equipo es gestionado por el departamento de IT de una empresa mediante WSUS, SCCM o Intune (el script convivirá sin problemas pero duplicará consultas al catálogo; consúltalo con tu administrador)
- Si usas conexión medida o con cuota de datos: cada ejecución de la tarea horaria consume pocos MB al consultar el catálogo; 24 consultas diarias pueden sumar decenas de MB al mes (si te preocupa, cambia la frecuencia a cada 3 o 6 horas desde el Programador de tareas)
- Si tienes un EDR/XDR que marca la enumeración del registro y el uso de
Microsoft.Update.Sessioncomo actividad anómala (excluyeC:\Scripts\Update-Check.ps1si es necesario) - Si el equipo tiene poco espacio en disco (<10 GB libres): el CSV histórico crece con el tiempo a razón de 24 filas por día; planifica rotar el archivo cada 3-6 meses
taskschd.msc), busca las tres tareas Update-Check-* en la Biblioteca y revisa el campo "Último resultado" de cada una (debe ser 0x0 = éxito) y la fecha de la última ejecución. También puedes consultar el CSV histórico con Import-Csv C:\Logs\update-check-historico.csv | Select -Last 24 para ver las últimas 24 ejecuciones con su disparador, días sin parche y actualizaciones pendientes.En equipos domésticos o profesionales sin solución corporativa de gestión de parches, este script es seguro y proporciona la trazabilidad completa del ciclo de parcheo recomendada por organismos como CISA y NIST: detecta en menos de una hora si Windows Update ha dejado de funcionar, si alguien lo ha deshabilitado, o si el equipo lleva demasiados días sin recibir parches críticos.
🔎 ¿Cómo verificar que la vigilancia está activa?
💡 ¿Cómo comprobar si la vigilancia de Windows Update está aplicada?
Ejecuta estos comandos en PowerShell como administrador para verificar el estado de las tareas programadas y del ciclo de parcheo:
# Verificar que las 3 tareas programadas existen y estan activas Get-ScheduledTask -TaskName "Update-Check-*" | ` Select-Object TaskName, State, LastRunTime, LastTaskResult # Consultar las ultimas ejecuciones registradas en el CSV historico Import-Csv C:\Logs\update-check-historico.csv | Select-Object -Last 24 # Ver el log completo de la ultima ejecucion Get-Content C:\Logs\update-check.log -Tail 60 # Ver actualizaciones pendientes manualmente Get-WindowsUpdate
Las tres tareas deben aparecer en estado Ready con LastTaskResult = 0. Si el CSV histórico registra ejecuciones cada hora y muestra DiasSinParche por debajo de 45, el ciclo de parcheo está funcionando correctamente.
🧠 Buenas prácticas para mantener Windows siempre actualizado
Get-WindowsUpdate · Mantén también actualizados los drivers · Activa actualizaciones de otros productos Microsoft desde Windows Update · Revisa el historial de actualizaciones mensualmente con Get-WUHistory · Revisa el CSV de vigilancia C:\Logs\update-check-historico.csv para detectar regresiones del servicio.- 🚨 No retrases los parches de seguridad críticos del Patch Tuesday, la ventana de explotación entre publicación del CVE y su uso activo se mide en días según el Attack Intelligence Report 2024
- 🔄 Reinicia cuando el sistema lo solicite, muchas actualizaciones no se aplican hasta que el reinicio pendiente se completa; dejar parches sin activar equivale a no haberlos instalado
- 🔍 Verifica parches pendientes regularmente con
Get-WindowsUpdatepara detectar actualizaciones que no se instalaron automáticamente - 🖥️ Mantén los drivers actualizados, los controladores desactualizados también tienen vulnerabilidades CVE documentadas y pueden ser vectores de escalación de privilegios
- 📋 Revisa el historial de actualizaciones mensualmente con
Get-WUHistorypara confirmar que los parches del Patch Tuesday se instalaron correctamente - 📊 Revisa el CSV de vigilancia periódicamente: si el campo
DiasSinParchesube por encima de 45 oServiciosDeshabilites distinto de 0, algo está interfiriendo con el ciclo de parcheo - 🛡️ Combina con Windows Defender y Microsoft Defender para protección en tiempo real frente a amenazas zero-day mientras llega el parche
- 🔒 Aplica el hardening de cuentas Windows como capa adicional de gestión de vulnerabilidades
✅ Checklist del ciclo de parcheo mensual en Windows
Ejecuta este checklist cada mes tras el Patch Tuesday (segundo martes del mes):
- ☐ Compruebo actualizaciones en Configuración → Windows Update → Buscar actualizaciones
- ☐ Instalo todos los parches de seguridad críticos sin demora
- ☐ Verifico con
Get-WindowsUpdateque no quedan parches pendientes de la semana - ☐ Reinicio el equipo si hay un reinicio pendiente por actualización activa
- ☐ Compruebo que no hay clave
RebootRequiredactiva en el registro - ☐ Reviso el historial de actualizaciones con
Get-WUHistorypara confirmar instalaciones - ☐ Las tres tareas
Update-Check-*aparecen en estado Ready:Get-ScheduledTask -TaskName "Update-Check-*" - ☐ El CSV histórico
C:\Logs\update-check-historico.csvtiene entradas recientes (última hora) - ☐ En el CSV no hay filas con
ServiciosDeshabilit > 0(nadie ha tocadowuauserv) - ☐ En el CSV
DiasSinParchese mantiene por debajo de 45 días - ☐ Actualizo también los drivers desde Administrador de dispositivos o mediante Windows Update opcional
- ☐ Tengo activa la opción "Recibir actualizaciones de otros productos de Microsoft"
- ☐ Windows Defender y sus definiciones de malware están actualizados
- ☐ Reviso si Microsoft publicó algún parche fuera de banda (out-of-band) de emergencia ese mes
🆚 Sistema actualizado vs sin parchear
| Característica | Sin parchear | Con parches al día y vigilancia activa |
|---|---|---|
| Vulnerabilidades CVE conocidas | 🔴 Sin corregir; explotables con herramientas públicas | 🟢 Parcheadas en el ciclo mensual Patch Tuesday |
| Ventana de explotación | 🔴 Abierta indefinidamente | 🟢 Cerrada en días tras la publicación del parche |
| Riesgo de ransomware | 🔴 Alto (WannaCry, NotPetya usaron CVEs sin parchear) | 🟢 Muy reducido |
| Riesgo de escalación de privilegios | 🔴 PrintNightmare, CVEs de kernel sin parchear | 🟢 Corregido con actualizaciones de seguridad |
| Trazabilidad del ciclo de parcheo | 🔴 Sin visibilidad; malware puede deshabilitar wuauserv | 🟢 CSV histórico cada hora; detección automática de regresiones en <60 min |
| Historial de actualizaciones | 🔴 KBs con estado "Failed" o directamente ausentes | 🟢 KBs instaladas verificables con Get-WUHistory |
| Estabilidad del sistema | 🟠 Media; bugs sin corregir en componentes críticos | 🟢 Alta; correcciones de calidad aplicadas |
| Rendimiento | 🟠 Peor con el tiempo por bugs acumulados | 🟢 Optimizado con cada actualización acumulativa |
| Recomendado | ❌ | ✅ |
🏁 Conclusión
Mantener las actualizaciones de Windows al día es una de las medidas de gestión de vulnerabilidades más importantes y de menor coste que puedes aplicar. Los casos de WannaCry y PrintNightmare demuestran que las consecuencias de no cerrar la ventana de explotación a tiempo pueden ser devastadoras. Según la alerta oficial de CISA sobre el ataque WannaCry de 2017, el parche MS17-010 llevaba casi dos meses disponible cuando se produjo el brote; la única diferencia entre los equipos infectados y los no infectados fue haber aplicado ese parche de seguridad.
Lo más valioso de la combinación PSWindowsUpdate + script de vigilancia es que convierte una tarea que la mayoría pospone indefinidamente en un proceso con trazabilidad completa. Las tres tareas programadas (inicio, logon y cada hora) no fuerzan instalaciones agresivas, pero garantizan que el servicio Windows Update sigue activo y que sabrás en menos de 60 minutos si alguien lo ha deshabilitado, si el equipo lleva demasiado tiempo sin parchear o si hay un reinicio pendiente olvidado. Encuentra más guías sobre protección del sistema en nuestros contenidos de seguridad online y en todos los artículos etiquetados como ciberseguridad.
- 🔒 No retrases nunca un parche de seguridad crítico del Patch Tuesday: la ventana de explotación entre publicación del CVE y uso activo es de días, no semanas
- 🔒 Instala PSWindowsUpdate y automatiza con
Install-WindowsUpdate -AcceptAll -AutoReboot: es la forma más eficaz de garantizar el ciclo de parcheo sin intervención manual - 🔒 Reinicia siempre cuando el sistema lo solicite: los parches con reinicio pendiente no están activos y la vulnerabilidad CVE sigue abierta hasta completar el reinicio
- 🔒 Activa las tres tareas programadas de vigilancia: te dan trazabilidad completa del ciclo de parcheo y detectan en menos de una hora si algún componente de Windows Update ha dejado de funcionar
- 🔒 Combina con el hardening de Windows 11: las actualizaciones cierran vulnerabilidades CVE y el hardening reduce la superficie de ataque; son capas complementarias de seguridad
- 🔒 Verifica con
Get-WUHistorymensualmente: confirma que los parches del Patch Tuesday y los parches fuera de banda de emergencia se instalaron correctamente
Comparte este artículo con quien siga posponiendo las actualizaciones de Windows. WannaCry infectó 200.000 equipos con un parche de seguridad disponible casi dos meses antes: el coste de aplicar el parche es cero, el de no hacerlo puede ser catastrófico.
❓ Preguntas frecuentes sobre actualizaciones de Windows
¿Es obligatorio instalar las actualizaciones de Windows?
👉 No es obligatorio, pero es altamente recomendable. Las actualizaciones de seguridad corrigen vulnerabilidades CVE activamente explotadas. No instalarlas es dejar abierta la ventana de explotación de forma innecesaria, asumiendo un riesgo documentado que puede evitarse con un ciclo de parcheo mensual.
¿Qué pasa si no actualizo Windows?
👉 Tu equipo queda expuesto a vulnerabilidades CVE conocidas que los atacantes explotan en días con herramientas públicas. WannaCry y NotPetya son ejemplos reales: ambos usaron el mismo CVE con puntuación CVSS 9.3 para el que existía parche disponible meses antes del brote.
¿Se puede automatizar Windows Update?
👉 Sí, desde la Configuración de Windows activando las actualizaciones automáticas, o mediante PowerShell con el módulo PSWindowsUpdate para mayor control sobre qué actualizaciones instalar, cuándo ejecutar el ciclo de parcheo y cómo verificar el historial de actualizaciones instaladas.
¿Las actualizaciones afectan al rendimiento del sistema?
👉 Generalmente lo mejoran. Las actualizaciones acumulativas incluyen correcciones de errores y optimizaciones de rendimiento acumuladas. Algunas actualizaciones de características pueden requerir reinicio, pero el impacto negativo en rendimiento es excepcional y temporal. Los sistemas sin parchear acumulan bugs y errores que sí degradan el rendimiento con el tiempo.
¿Con qué frecuencia publica Microsoft parches de seguridad?
👉 Microsoft publica actualizaciones de seguridad el segundo martes de cada mes en el ciclo Patch Tuesday. Para vulnerabilidades críticas con puntuación CVSS alta y explotación activa confirmada puede publicar parches fuera de banda de carácter urgente en cualquier momento del mes, sin esperar al siguiente Patch Tuesday.
¿Cómo verifico qué parches de Windows tengo pendientes?
👉 Desde Configuración → Windows Update → Buscar actualizaciones. O mediante PowerShell ejecutando Get-WindowsUpdate tras instalar el módulo PSWindowsUpdate, que devuelve un listado detallado con los identificadores KB, descripción del CVE corregido y tamaño de cada parche pendiente.
¿Qué es un reinicio pendiente y por qué es importante aplicarlo?
👉 Un reinicio pendiente significa que hay parches instalados cuyos cambios en el kernel o en componentes críticos del sistema no se activarán hasta completar el reinicio. Mientras el reinicio esté pendiente, la vulnerabilidad CVE que ese parche corrige sigue técnicamente activa. Reiniciar es la última fase del ciclo de parcheo, no un paso opcional.
¿Por qué la tarea de vigilancia se ejecuta cada hora?
👉 Porque una hora es el intervalo óptimo entre tiempo de reacción y coste sobre el sistema. Consultar el catálogo de Windows Update dura unos pocos segundos y consume muy pocos MB de red: 24 consultas diarias es una carga marginal. A cambio, si malware o un tercero deshabilita wuauserv para impedir que el equipo reciba parches, el script lo detecta y lo reactiva en menos de 60 minutos. Si prefieres un intervalo mayor (cada 3, 6 o 12 horas), puedes editarlo directamente en el Programador de tareas sin tocar el script.
¿Las tres tareas programadas ralentizan el equipo o consumen mucha red?
👉 No de forma perceptible. Cada ejecución dura entre 5 y 15 segundos, se realiza en background como SYSTEM y en modo oculto (sin ventana visible). La tarea de inicio y la de logon no consultan el catálogo remoto, solo verifican el estado local de servicios y registro; la tarea horaria sí consulta el catálogo pero consume pocos MB por ejecución. El total diario (24 consultas horarias) suma unos pocos minutos de CPU y unos MB de red; es marginal incluso en conexiones con cuota de datos moderada.
¿Cómo desactivo las tareas programadas si quiero parar la vigilancia?
👉 Tienes dos opciones. La rápida: ejecuta el script de reversión incluido en esta guía, que elimina las tres tareas (Update-Check-Inicio, Update-Check-Logon y Update-Check-Horaria) en un solo paso. La manual: abre el Programador de tareas (Win+R → taskschd.msc), localiza las tres tareas en la Biblioteca y pulsa Eliminar en cada una. La configuración de Windows Update sigue activa por seguridad y los logs históricos se conservan en C:\Logs\.
¿Puedo cambiar la frecuencia de la tarea horaria si me parece excesiva?
👉 Sí. Abre el Programador de tareas, localiza Update-Check-Horaria, ve a la pestaña Desencadenadores, edita el desencadenador y cambia el campo "Repetir cada" a 2 horas, 6 horas, 12 horas o el intervalo que prefieras. También puedes desactivar esa tarea en concreto y dejar solo las dos basadas en eventos (inicio y logon), aunque perderás la vigilancia continua entre sesiones. Cada hora es el equilibrio recomendado en este escenario porque garantiza que, si malware o un tercero deshabilita wuauserv, la desviación se detecta y corrige en menos de 60 minutos.




Deja una respuesta