🧩 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:

  1. Deshabilita las sincronizaciones automáticas de WSUS o del SUP de Configuration Manager durante el mantenimiento.
  2. Ejecuta PowerShell como Administrador en el servidor WSUS.
  3. Verifica que el módulo SqlServer esté instalado (versión 22 o superior):
Install-Module -Name SqlServer -Force
  1. El script detecta automáticamente la base de datos local (WID o SQL), pero asegúrate de que la conexión funcione.
  2. Realiza una copia de seguridad reciente de la base de datos SUSDB.
  3. 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

PasoAcciónDescripción
1. Update Count (Inicial)Recuento inicial de actualizacionesConsulta SQL para obtener métricas: Total Updates, Superseded, Declined, Obsolete.
2. Actualizar spDeleteUpdateOptimización SQLSustituye el procedimiento almacenado por una versión más eficiente.
3. Shrink FilesReducir archivos físicosEjecuta DBCC SHRINKFILE para liberar espacio no utilizado.
4. Shrink DatabaseCompactar base de datos completaEjecuta DBCC SHRINKDATABASE para compactar la base de datos entera.
5. Reindex & Update StatisticsReconstruir índicesMejora el rendimiento general mediante ALTER INDEX ALL ... REBUILD.
6. Cleanup Sync HistoryLimpiar historial de sincronizacionesBorra registros antiguos del historial (tbEventInstance).
7. Cleanup Superseded UpdatesDeclinar actualizaciones supersedidasMarca como “declined” las actualizaciones supersedidas anteriores a ThresholdDays.
8. Cleanup Obsolete UpdatesEliminar actualizaciones obsoletasLlama spGetObsoleteUpdatesToCleanup y elimina cada actualización obsoleta.
9. WSUS Cleanup WizardEjecutar el asistente WSUSUsa las APIs de Microsoft.UpdateServices.Administration para limpiar equipos, archivos y contenido no usado.
10. Cleanup DeclinedEliminar actualizaciones declineadasLimpia todas las actualizaciones marcadas como “declined”.
11. Shrink & Reindex (Final)Compactar y optimizar nuevamenteReconstruye índices y compacta tras la limpieza.
12. Update Count (Final)Métricas post-mantenimientoCompara 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

  1. Abre el Programador de tareas (taskschd.msc).
  2. Crea una nueva tarea ejecutada con credenciales de administrador.
  3. Configura la acción:
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\WsusDBMaintenance.ps1" -Mode RA -ThresholdDays 30
  1. 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 UpdateCount para 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


✅ 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.