🧩 Mantenimiento automático de WSUS con script completo (basado en Microsoft Learn)
Referencia original: Mantener la base de datos de WSUS manual o automáticamente
📘 Introducción
Con el paso del tiempo, WSUS acumula actualizaciones obsoletas, supersedidas o rechazadas que degradan el rendimiento tanto del servidor como de la base de datos SUSDB.
Para mantener un entorno saludable, Microsoft recomienda ejecutar tareas de mantenimiento regulares.
Aunque es posible hacerlo de forma manual, Microsoft ha publicado un script completo en PowerShell que automatiza todo el proceso de mantenimiento: limpieza de actualizaciones, compactación de la base de datos, reindexación y más.
Este documento describe el flujo completo del mantenimiento automático utilizando el script oficial de Microsoft.
⚙️ Prerrequisitos
Antes de ejecutar el script:
- Deshabilita las sincronizaciones automáticas de WSUS o del SUP de Configuration Manager durante el mantenimiento.
- Ejecuta PowerShell como Administrador en el servidor WSUS.
- Verifica que el módulo SqlServer esté instalado (versión 22 o superior):
Install-Module -Name SqlServer -Force
- El script detecta automáticamente la base de datos local (WID o SQL), pero asegúrate de que la conexión funcione.
- Realiza una copia de seguridad reciente de la base de datos SUSDB.
- Asegúrate de tener espacio en disco suficiente para las operaciones de compactación.
🚀 Ejecución del script completo
El script de Microsoft permite elegir opciones individuales, pero la opción RA (Run All) ejecuta todo el flujo completo de mantenimiento en orden recomendado. Link Descarga Script.
Ejemplo de ejecución:
.\WsusDBMaintenance.ps1 -Mode RA -ThresholdDays 30
- -Mode RA → Ejecuta todos los pasos automáticamente.
- -ThresholdDays 30 → Rechaza (decline) actualizaciones supersedidas de más de 30 días.
🧭 Flujo completo del mantenimiento
| Paso | Acción | Descripción | 
|---|---|---|
| 1. Update Count (Inicial) | Recuento inicial de actualizaciones | Consulta SQL para obtener métricas: Total Updates, Superseded, Declined, Obsolete. | 
| 2. Actualizar spDeleteUpdate | Optimización SQL | Sustituye el procedimiento almacenado por una versión más eficiente. | 
| 3. Shrink Files | Reducir archivos físicos | Ejecuta DBCC SHRINKFILEpara liberar espacio no utilizado. | 
| 4. Shrink Database | Compactar base de datos completa | Ejecuta DBCC SHRINKDATABASEpara compactar la base de datos entera. | 
| 5. Reindex & Update Statistics | Reconstruir índices | Mejora el rendimiento general mediante ALTER INDEX ALL ... REBUILD. | 
| 6. Cleanup Sync History | Limpiar historial de sincronizaciones | Borra registros antiguos del historial ( tbEventInstance). | 
| 7. Cleanup Superseded Updates | Declinar actualizaciones supersedidas | Marca como “declined” las actualizaciones supersedidas anteriores a ThresholdDays. | 
| 8. Cleanup Obsolete Updates | Eliminar actualizaciones obsoletas | Llama spGetObsoleteUpdatesToCleanupy elimina cada actualización obsoleta. | 
| 9. WSUS Cleanup Wizard | Ejecutar el asistente WSUS | Usa las APIs de Microsoft.UpdateServices.Administrationpara limpiar equipos, archivos y contenido no usado. | 
| 10. Cleanup Declined | Eliminar actualizaciones declineadas | Limpia todas las actualizaciones marcadas como “declined”. | 
| 11. Shrink & Reindex (Final) | Compactar y optimizar nuevamente | Reconstruye índices y compacta tras la limpieza. | 
| 12. Update Count (Final) | Métricas post-mantenimiento | Compara valores antes y después del mantenimiento. | 
📑 Ejemplo de resultados esperados
Después de ejecutar el script, deberías ver una reducción significativa en:
- Actualizaciones obsoletas y supersedidas
- Tamaño de la base de datos SUSDB
- Tiempo de sincronización WSUS
- Espacio ocupado por archivos de contenido WSUS
Además, se genera un log detallado (por defecto C:\Temp\SUSDB-Maintenance.log) con tiempos de ejecución y resultados de cada fase.
⚠️ Consideraciones importantes
⚠️ Advertencias:
- El proceso puede tardar horas o incluso días en entornos grandes.
- Si falla durante el paso de limpieza de obsoletos, puede repetirse sin problemas.
- Asegúrate de no ejecutar sincronizaciones durante el mantenimiento.
- Ejecuta este script en periodos de baja actividad (por ejemplo, fines de semana).
- Si WSUS está jerarquizado, empieza por los servidores secundarios antes del primario.
🕒 Automatización del proceso
Puedes programar este mantenimiento de forma recurrente:
Opción 1️⃣ — Tarea programada en el servidor WSUS
- Abre el Programador de tareas (taskschd.msc).
- Crea una nueva tarea ejecutada con credenciales de administrador.
- Configura la acción:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\WsusDBMaintenance.ps1" -Mode RA -ThresholdDays 30
- Programa la ejecución mensualmente o quincenalmente.
Opción 2️⃣ — Pipeline en Azure DevOps
Incluye una tarea PowerShell en tu pipeline YAML con permisos al servidor WSUS:
- task: PowerShell@2
  displayName: 'WSUS Maintenance'
  inputs:
    filePath: '$(System.DefaultWorkingDirectory)/WsusDBMaintenance.ps1'
    arguments: '-Mode RA -ThresholdDays 30'
    failOnStderr: true
🧩 Validación posterior
Una vez completado:
- Ejecuta nuevamente .\WsusDBMaintenance.ps1 -Mode UpdateCountpara comparar resultados.
- Verifica el tamaño actual de la base de datos (SUSDB.mdf, SUSDB_log.ldf).
- Comprueba el log en C:\Temp\SUSDB-Maintenance.log.
- Reanuda las sincronizaciones automáticas del WSUS o del SUP.
📚 Referencias
- 🧱 Artículo oficial de Microsoft
- 🗄️ DBCC SHRINKDATABASE (Transact-SQL)
- ⚙️ Cmdlet Invoke-Sqlcmd (SqlServer)
✅ Conclusión
El mantenimiento automático de WSUS usando el script completo de Microsoft garantiza:
- Mejor rendimiento del servidor WSUS.
- Reducción del tamaño de la base de datos SUSDB.
- Limpieza de contenido innecesario.
- Mayor estabilidad en la sincronización con Microsoft Update o Configuration Manager.
💡 Recomendación: ejecuta este proceso mensualmente y documenta los resultados para mantener el entorno bajo control.

No se han encontrado comentarios