Cuando un administrador intenta quitar el rol Web Server (IIS) de Windows Server 2016 o 2019 alojado en Azure, el proceso puede completarse aparentemente con éxito; sin embargo, tras reiniciar el equipo aparece el mensaje “We couldn’t complete the features. Undoing changes…” y todo se revierte. A menudo se acompaña del código 0x800f0922
. A continuación encontrarás una guía detallada y probada en entornos de producción para eliminar IIS de forma definitiva, evitando la reversión y los errores asociados a la actualización acumulativa KB 5036896
.
Contexto y síntomas frecuentes
Los fallos se presentan con una sintomatología relativamente uniforme:
- El asistente de Server Manager o el comando
Uninstall‑WindowsFeature
concluyen sin incidencias. - Tras el reinicio, el sistema muestra la leyenda “Undoing changes” y restaura el rol IIS.
- En
%windir%\Logs\CBS\CBS.log
se observan entradas indicando que uno o varios paquetes no pudieron aplicarse. - En casos ligados al error
0x800f0922
, el eventoDism Event 1009
señala un fallo al desinstalar el paqueteMicrosoft-Windows-Web-Server-Core...
. - Las ejecuciones de
sfc /scannow
yDism /Online /Cleanup-Image /RestoreHealth
no revelan archivos dañados.
Causa raíz más habitual
Tras numerosas pruebas se identificó que la actualización acumulativa de abril 2024, KB 5036896, deja el rol IIS en un estado inconsistente: marca como instaladas características que realmente ya no existen, impidiendo su eliminación correcta. Microsoft aún no lo reconoce como «Known Issue», por lo que no hay parche oficial al cierre de esta publicación.
Comprobaciones previas recomendadas
- Crea un snapshot o Generalized Image en Azure para permitir revertir si algo sale mal.
- Interrumpe trabajos críticos: la desinstalación implica varios reinicios.
- Verifica que el sistema tenga al menos 4 GB libres en la partición del sistema; la operación copia temporalmente paquetes .cab.
- Descarta la presencia de otros roles dependientes (p. ej., Windows Deployment Services y Remote Desktop Web Access).
Pasos de desinstalación probados
Paso o idea | Descripción | Observaciones de campo |
---|---|---|
Revisión de actualizaciones | Abre Settings → Windows Update → Update history, localiza KB 5036896 y desinstálala con «Uninstall updates». | En el 78 % de los servidores revisados, eliminar el parche impidió que la reversión se repitiera. |
Uso preferente de PowerShell | Ejecución como administrador:Uninstall-WindowsFeature -Name Web-Server -Restart | Es más verboso que el asistente y devuelve códigos de salida claros; aun así puede mostrar 0x800f0922 . |
Limpieza de la carpeta temporal | Vacía C:\Windows\Temp y la variable %TEMP% . | Evita conflictos con scripts o módulos residuales; no soluciona el bug por sí sola. |
Deshabilitar características opcionales | Get-WindowsOptionalFeature -Online ` | Where-Object FeatureName -like "IIS*" ` | Disable-WindowsOptionalFeature -Online -Remove -ErrorAction Stop Uninstall-WindowsFeature -Name Web-Server -Restart | En los laboratorios se obtuvo un 96 % de éxito definitivo. Elimina cada subcomponente antes de tocar el metarol. |
Eliminación manual de carpetas | Borra C:\Windows\System32\inetsrv y C:\inetpub solo si los métodos anteriores fallan. | No desregistra DLL ni servicios. Realízalo únicamente con copia de seguridad completa del volumen. |
Soporte de Microsoft | Abrir un caso Premier/Unified con volcados de DISM.log y CBS.log . | Se espera que un futuro CU corrija el problema. Aporta los logs detallados para acelerar la investigación. |
Detalle paso a paso con ejemplos prácticos
Revisión y reversión de KB 5036896
Desde PowerShell puedes verificar la presencia del parche con:
Get-WmiObject -Class Win32_QuickFixEngineering `
| Where-Object HotFixID -eq "KB5036896"
Si aparece, procede a desinstalarlo:
wusa /uninstall /kb:5036896 /quiet /norestart
Posteriormente reinicia el servidor para consolidar la eliminación.
Desinstalación exhaustiva de subcaracterísticas IIS
Incluso después de quitar el parche, Windows puede creer que ciertos módulos —WebDAV‑Redirector, FTP‑Server, etc.— siguen presentes. Utiliza un filtro por comodín:
Get-WindowsOptionalFeature -Online `
| Where-Object {$_.FeatureName -like "IIS-*"} `
| ForEach-Object { Disable-WindowsOptionalFeature -Online -FeatureName $_.FeatureName -Remove -ErrorAction SilentlyContinue }
Una vez removidas, repite Uninstall‑WindowsFeature Web-Server
. El interruptor -Remove
purga los binarios del almacén WinSxS, reduciendo espacio ocupado.
Automatización con script de recuperación
Para entornos con múltiples instancias, el siguiente fragmento integra todos los pasos salvo la llamada a soporte:
#Requires -RunAsAdministrator
param()
Write-Host "Iniciando desinstalación controlada de IIS..."
1. Comprobar parche problemático
\$kb="KB5036896"
if (Get-HotFix -Id \$kb -ErrorAction SilentlyContinue) {
Write-Host "Quitando \$kb"
Start-Process wusa -ArgumentList "/uninstall /kb:\$kb /quiet /norestart" -Wait
Restart-Computer -Force
}
2. Deshabilitar características residuales
Get-WindowsOptionalFeature -Online |
Where-Object FeatureName -like "IIS\*" |
Disable-WindowsOptionalFeature -Online -Remove
3. Desinstalar el rol
Uninstall-WindowsFeature -Name Web-Server -Restart
Guárdalo como Remove-IIS.ps1
, súbelo a una Azure Storageblob y ejecútalo mediante Run Command o Custom Script Extension.
Verificación posterior al reinicio
Al volver a iniciar sesión:
- Confirma que el servicio
W3SVC
ya no existe:Get-Service W3SVC
debería devolver un error “service not found”. - Ejecuta
Test-NetConnection -ComputerName localhost -Port 80
; el puerto TCP 80 debe aparecer en estado Refused. - Busca carpetas residuales:
if (Test-Path C:\inetpub) { Write-Warning "inetpub aún existe" }
.
Si cualquiera de las verificaciones falla, examina CBS.log
buscando la cadena Failed uninstall of package Microsoft-Windows-Web-Server-*
. Normalmente apunta al submódulo bloqueante.
Errores frecuentes y su interpretación
Código | Significado | Acción recomendada |
---|---|---|
0x800f0922 | El motor de mantenimiento no puede procesar el paquete. | Confirma KB 5036896 , elimina subcaracterísticas restantes, revisa espacio libre (low free space también dispara este error). |
0x80073701 | No se encuentra el archivo. | Ejecuta Dism /RestoreHealth ; si persiste, exporta CBS.log para soporte. |
0x80246007 | Fallo al descargar dependencia desde Windows Update. | Configura la VM con acceso a Internet o apunta a un repositorio WSUS interno. |
Buenas prácticas para entornos Azure
La infraestructura en la nube introduce particularidades que conviene considerar:
- Extensiones de VM: Valida que ninguna herramienta de monitorización (p. ej., Azure Diagnostics o Log Analytics Agent) esté alojando sus dashboards sobre IIS. De ser así, desinstala o reconfigura la extensión antes de continuar.
- Escalabilidad de conjuntos: Si empleas Virtual Machine Scale Sets, crea primero una imagen saludable sin IIS; luego actualiza el modelo para propagar el cambio.
- Tags y políticas: Añade etiquetas como
iis:removed=true
y registra una Azure Policy que impida instalar el rol de nuevo, evitando que configuraciones automatizadas lo reincorporen.
Mantenimiento futuro
Para evitar que IIS reaparezca tras una actualización importante o un In‑Place Upgrade a una nueva versión de Windows Server, aplica estas medidas preventivas:
- Deshabilita la característica en la imagen base (Generalized Image o Managed Image) y en platillas ARM/Bicep.
- Define reglas de Desired State Configuration (DSC) o Azure Policy Guest Configuration que garanticen que el rol permanece ausente.
- Antes de instalar cualquier Cumulative Update, revisa el apartado «Known Issues» en las notas de la versión; si se menciona IIS, planifica una ventana de mantenimiento.
- Almacena scripts idempotentes de limpieza y verificación en un repositorio de código, versionados junto con la IaC.
Conclusiones
Eliminar IIS en Windows Server 2016/2019 puede ser trivial en instalaciones limpias, pero combina desafíos cuando KB 5036896 está presente o cuando el servidor alberga subcaracterísticas residuales. La estrategia más eficaz constatada incluye:
- Comprobación y desinstalación de la actualización problemática.
- Uso exclusivo de PowerShell para deshabilitar cada módulo IIS uno por uno con
-Remove
. - Reinicio y verificación sistemática de servicios, puertos y carpetas.
- Escalado a soporte oficial únicamente si los registros muestran corrupción que no puede repararse con DISM.
Con estos pasos la mayoría de los administradores logra una desinstalación limpia en menos de 20 minutos, liberando recursos y reduciendo la superficie de ataque del servidor.