¿Windows Server 2016 se queda “Descargando actualizaciones 0%” de forma indefinida? Aquí tienes una guía práctica, probada en campo, para desbloquear Windows Update paso a paso (de lo más simple a lo más profundo) sin reinstalar el sistema.
Síntoma y contexto
En servidores con Windows Server 2016 puede ocurrir que Windows Update detecte actualizaciones, inicie la descarga y quede permanentemente en 0%. El problema suele relacionarse con cachés corruptas, servicios detenidos, políticas WSUS, limitaciones de red/proxy o componentes de mantenimiento (SSU/CU) fuera de secuencia.
Solución rápida (resumen ejecutivo)
- Reset de Windows Update (vaciar
SoftwareDistribution
yCatroot2
). - Revisar proxy/firewall y limpiar WinHTTP.
- Comprobar integridad con
SFC
yDISM
. - Validar GPO/WSUS (URL, aprobaciones, “UseWUServer”).
- Analizar logs (
Get-WindowsUpdateLog
y Visor de eventos). - Instalación manual: primero SSU, luego CU, reiniciar y reintentar.
Checklist de pre-requisitos
Qué revisar | Cómo comprobar | Resultado esperado |
---|---|---|
Conectividad a Internet/WSUS | Test-NetConnection a tu gateway/WSUS; ping a dominios públicos si la política lo permite | Latencia estable, sin pérdidas |
Hora/fecha/NTP | Sincronía con NTP corporativo (w32tm /query /status ) | Desfase < 5 minutos |
Reinicio pendiente | Clave RebootPending o mensaje “Pending reboot” en Windows Update | Si hay reinicio pendiente, reiniciar |
Espacio en disco | > 5–10 GB libres en C: | Evita fallos por falta de espacio |
Servicios clave (deben estar iniciados y en Automático)
- Windows Update (
wuauserv
) - Background Intelligent Transfer Service (
BITS
) - Cryptographic Services (
CryptSvc
) - Windows Installer (
msiserver
) - Windows Modules Installer (
TrustedInstaller
) - Delivery Optimization (
DoSvc
) — si se usa
# PowerShell (Admin)
'wuauserv','bits','cryptsvc','msiserver','TrustedInstaller','DoSvc' | ForEach-Object {
Set-Service -Name $_ -StartupType Automatic -ErrorAction SilentlyContinue
Start-Service -Name $_ -ErrorAction SilentlyContinue
}
Get-Service wuauserv,bits,cryptsvc,msiserver,TrustedInstaller,DoSvc | Format-Table -Auto
Limpieza “clásica” de componentes de Windows Update
Esta limpieza fuerza a Windows a reconstruir las cachés y suele resolver el 0% perpetuo.
:: CMD (Administrador)
net stop wuauserv
net stop cryptSvc
net stop bits
net stop msiserver
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 Catroot2.old
net start wuauserv
net start cryptSvc
net start bits
net start msiserver
Proxy, TLS e inspección SSL
Los proxys mal configurados o la inspección TLS sin excepciones suelen bloquear Windows Update.
- WinHTTP vs WinINET: Windows Update usa la configuración de WinHTTP, no la del navegador.
- Si hay proxy corporativo, habilita excepciones para dominios de Microsoft Update/WSUS (sin listar dominios aquí por política, coordínalo con tu equipo de red).
:: Ver y limpiar configuración de proxy de WinHTTP
netsh winhttp show proxy
netsh winhttp reset proxy
:: (Opcional) importar la configuración del navegador
netsh winhttp import proxy source=ie
Habilitar TLS 1.2 (recomendado en entornos antiguos):
:: Habilitar TLS 1.2 para cliente SCHANNEL
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f
:: Ampliar protocolos seguros por defecto de WinHTTP (TLS 1.1/1.2)
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" /v DefaultSecureProtocols /t REG_DWORD /d 0xA00 /f
Nota: puede requerir reinicio para aplicar totalmente.
Comprobar integridad del sistema
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth
Si DISM pide archivos fuente, monta el ISO de instalación (D:\) y usa:
DISM /Online /Cleanup-Image /RestoreHealth /Source:wim:D:\sources\install.wim:2 /LimitAccess
Revisar y ajustar directivas (GPO) de Windows Update
Abre gpedit.msc → Computer Configuration → Administrative Templates → Windows Components → Windows Update y valida:
- “Configure Automatic Updates” no debe bloquear descargas.
- Si usas WSUS: URL/puerto correctos y aprobaciones vigentes.
Vía registro del cliente:
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
La clave UseWUServer
(=1 usa WSUS, =0 usa Windows Update) es crítica. Tras cambios de GPO:
gpupdate /force
Analizar el registro de Windows Update
# Genera WindowsUpdate.log en el escritorio
Get-WindowsUpdateLog
Revisa también en el Visor de eventos:
- Applications and Services Logs → Microsoft → Windows → WindowsUpdateClient → Operational
- Applications and Services Logs → Microsoft → Windows → Bits-Client → Operational
Claves a buscar: errores de conexión (timeout), problemas de hash (daño de descarga), SSU faltante o fallos de BITS.
Instalación manual: SSU + CU
- Identifica e instala primero el Servicing Stack Update (SSU) más reciente para Windows Server 2016.
- Luego instala el Cumulative Update (CU) correspondiente.
- Reinicia, abre Windows Update y reinicia el ciclo de detección/descarga.
Consejos:
- Busca por KB en el Microsoft Update Catalog (sin enlace) y descarga el paquete
.msu
adecuado (x64). - Comprueba lo ya instalado:
DISM /Online /Get-Packages | findstr KB
- Instala manualmente:
wusa.exe <KBxxxxxxx.msu> /quiet /norestart
Forzar un nuevo escaneo de actualizaciones
Tras cualquier corrección, fuerza un escaneo limpio:
wuauclt /resetauthorization /detectnow
wuauclt /reportnow
:: Alternativa en Server 2016
UsoClient StartScan
UsoClient StartDownload
UsoClient StartInstall
:: O bien
schtasks /Run /TN "\Microsoft\Windows\UpdateOrchestrator\Schedule Scan"
Depuración de BITS (descargas)
# Listar trabajos BITS actuales (todas las sesiones)
Get-BitsTransfer -AllUsers | Format-List *
Cancelar trabajos atascados
Get-BitsTransfer -AllUsers | Remove-BitsTransfer -Confirm:$false
Mantenimiento post-reparación
# Liberar componentes antiguos y reducir el tamaño de WinSxS
Dism /Online /Cleanup-Image /StartComponentCleanup /ResetBase
Limpiar archivos temporales de Windows Update (una vez verificado el correcto estado)
rd /s /q C:\Windows\SoftwareDistribution.old 2>nul
rd /s /q C:\Windows\System32\Catroot2.old 2>nul
Tabla: servicios y su función
Servicio | Nombre | Función principal |
---|---|---|
Windows Update | wuauserv | Orquesta detección, descarga e instalación |
Background Intelligent Transfer | BITS | Descarga en segundo plano y robusta |
Cryptographic Services | CryptSvc | Validación de firmas y catálogos |
Windows Installer | msiserver | Instalación de MSI dependientes |
Modules Installer | TrustedInstaller | Instala actualizaciones del sistema |
Delivery Optimization | DoSvc | Optimización/compartición de descargas (si aplica) |
Tabla: errores frecuentes y pistas
Código | Descripción breve | Qué probar |
---|---|---|
0x80072EE2 / 0x8024401C | Timeout / proxy | Revisar proxy, excepciones TLS, netsh winhttp reset proxy |
0x800F081F | Faltan archivos fuente | DISM con /Source desde ISO |
0x800F0922 | Partición reservada insuficiente | Extender partición reservada o liberar espacio |
0x8024A105 / 0x8024001E | Error de cliente/servicio WU | Reiniciar servicios, limpieza de cachés, revisar logs |
WSUS: comprobaciones específicas del cliente
- Comprueba que el servidor esté asignado al grupo correcto en WSUS y que las actualizaciones estén aprobadas.
- Verifica
UseWUServer
y las URL deWUServer
/WUStatusServer
en el registro. - Si el servidor se clonó a partir de una imagen, regenera el identificador WSUS del cliente para evitar duplicados:
net stop wuauserv
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientIdValidation /f
net start wuauserv
wuauclt /resetauthorization /detectnow
Acciones opcionales (casos persistentes)
- Reset de red:
netsh winsock reset
ynetsh int ip reset
(requiere reinicio). - No deshabilites IPv6 salvo que sea estrictamente necesario; puede romper rutas hacia servicios de Microsoft.
- Revisar antivirus/EDR: excluye temporalmente carpetas de
SoftwareDistribution
/Catroot2
. - Discos/volúmenes: si hay errores en NTFS, ejecuta un
chkdsk
programado fuera de horario.
Lista “lista para copiar” (secuencia sugerida)
- Reset WU (bloque de limpieza de cachés).
- Proxy/Firewall (mostrar y resetear WinHTTP; excepciones TLS).
- SFC/DISM (integridad del sistema y reparación de imagen).
- GPO/WSUS (validar políticas,
UseWUServer
, aprobaciones). - Logs (
Get-WindowsUpdateLog
, Visor de eventos, BITS). - SSU + CU manual (reiniciar y reintentar Windows Update).
Script de automatización guiada (PowerShell)
Ejecuta en PowerShell con privilegios de administrador. Útil para servidores críticos (ejecútalo fuera de horario).
# Repair-WS2016-Update.ps1 (simplificado y seguro)
[CmdletBinding(SupportsShouldProcess)]
param(
[switch]$SkipTLS,
[switch]$NoCleanupOldFolders
)
function Write-Info(\$msg){ Write-Host "\[INFO] \$msg" }
function Try-Start(\$svc){ Try { Set-Service \$svc -StartupType Automatic -ErrorAction Stop; Start-Service \$svc -ErrorAction Stop; Write-Info "Servicio \$svc iniciado." } Catch { Write-Info "No se pudo iniciar \$svc: \$($\_.Exception.Message)" } }
Write-Info "Comprobando espacio libre..."
Get-PSDrive -Name C | ForEach-Object { if (\$.Free -lt 10GB) { Write-Info "Advertencia: menos de 10GB libres en C: (\$(\[math]::Round(\$.Free/1GB,1)) GB)" } }
Write-Info "Iniciando/auto servicios clave..."
'wuauserv','bits','cryptsvc','msiserver','TrustedInstaller','DoSvc' | ForEach-Object { Try-Start $\_ }
Write-Info "Deteniendo servicios para limpiar cachés..."
Stop-Service wuauserv,bits,cryptsvc,msiserver -Force -ErrorAction SilentlyContinue
Write-Info "Renombrando SoftwareDistribution/Catroot2..."
\$sd = "\$env\:windir\SoftwareDistribution"
\$cr = "\$env\:windir\System32\catroot2"
if (Test-Path \$sd){ Rename-Item \$sd "\${sd}.old" -ErrorAction SilentlyContinue }
if (Test-Path \$cr){ Rename-Item \$cr "\${cr}.old" -ErrorAction SilentlyContinue }
Write-Info "Reiniciando servicios..."
Start-Service wuauserv,bits,cryptsvc,msiserver -ErrorAction SilentlyContinue
if (-not \$SkipTLS){
Write-Info "Habilitando TLS 1.2 en SCHANNEL/WinHTTP (puede requerir reinicio)..."
New-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Force | Out-Null
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name "Enabled" -Value 1 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -Name "DisabledByDefault" -Value 0 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp" -Name "DefaultSecureProtocols" -Value 0xA00 -PropertyType DWord -Force | Out-Null
}
Write-Info "Reseteando proxy WinHTTP..."
& netsh winhttp reset proxy | Out-Null
Write-Info "Ejecutando SFC..."
sfc /scannow
Write-Info "Ejecutando DISM RestoreHealth..."
DISM /Online /Cleanup-Image /RestoreHealth
Write-Info "Forzando escaneo de actualizaciones..."
& wuauclt /resetauthorization /detectnow
& wuauclt /reportnow
& UsoClient StartScan
Write-Info "Hecho. Revisa Windows Update. Si sigue en 0%, procede con SSU+CU manual."
Buenas prácticas para evitar recaídas
- Mantén SSU al día: sin SSU reciente, muchos CU fallan o no descargan.
- Garantiza espacio libre en C: (monitoriza la unidad del sistema).
- Evita inspección SSL sobre Windows Update o agrega exclusiones explícitas.
- No desactives IPv6 sin una razón técnica justificada.
- Controla reinicios pendientes tras CU grandes y .NET.
Preguntas frecuentes
¿Puedo borrar “SoftwareDistribution.old” y “Catroot2.old”?
Sí, una vez que confirmes que Windows Update funciona tras la reparación. Bórralos para recuperar espacio.
¿Cómo sé si necesito SSU?
Si los CU no se instalan o la descarga se estanca, instala primero el SSU más reciente; a menudo es el desbloqueo que falta.
¿BITS o Delivery Optimization?
En Server 2016 la descarga se apoya principalmente en BITS; DO puede intervenir en ciertos escenarios. Activa ambos servicios.
¿Qué pasa si el servidor usa WSUS y fue clonado?
Regenera el SusClientId (ver sección WSUS). Los duplicados en WSUS provocan estados incoherentes y colas bloqueadas.
Conclusión
Con el plan anterior —verificaciones rápidas, servicios, limpieza de cachés, red/proxy/TLS, integridad del sistema, revisión de GPO/WSUS, análisis de logs y, si es necesario, instalación manual de SSU+CU— la gran mayoría de casos de “Descargando actualizaciones 0%” en Windows Server 2016 se resuelven sin reinstalar ni realizar cambios drásticos. Ejecuta los pasos en orden, valida después de cada bloque y documenta los hallazgos para fortalecer tu estándar operativo.
Secuencia de referencia rápida
- Reset de Windows Update (cachés).
- Proxy/Firewall/TLS (WinHTTP y excepciones).
- Integridad con SFC/DISM.
- GPO/WSUS (URL, “UseWUServer”, aprobaciones).
- Logs (WindowsUpdate.log, eventos BITS/WU).
- SSU + CU manual, reinicio y reintento.
Causas típicas del 0% fijo: caché corrupta de SoftwareDistribution
/Catroot2
, proxy o inspección SSL agresiva, SSU ausente, reinicio pendiente o falta de espacio en disco.
Tip final: tras el “reset” y el SSU correcto, el porcentaje suele moverse casi de inmediato; si permanece en 0%, vuelve a BITS y al proxy.