Infrastructure
Windows Server Update Services (WSUS) : Gérer les mises à jour de tout le parc en entreprise

Windows Server Update Services (WSUS) : Gérer les mises à jour de tout le parc en entreprise

Pourquoi centraliser les mises à jour avec WSUS ?

Sans WSUS, chaque machine télécharge ses mises à jour directement depuis Microsoft Update : charge réseau élevée, absence de contrôle sur les versions déployées et risque de mise à jour cassant une application critique. WSUS résout ces trois problèmes.

1. Installation du rôle WSUS

# Installer WSUS avec base WID (Windows Internal Database) sur D:WSUS
Install-WindowsFeature -Name UpdateServices, UpdateServices-UI `
    -IncludeManagementTools

# Configurer le répertoire de stockage des mises à jour
& "C:Program FilesUpdate ServicesToolswsusutil.exe" postinstall `
    CONTENT_DIR="D:WSUSUpdateServicesPackages"

2. Configuration initiale via PowerShell

# Se connecter au serveur WSUS
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("SRV-WSUS01", $false, 8530)

# Configurer la synchronisation depuis Microsoft Update
$config = $wsus.GetConfiguration()
$config.ProxyName                = ""              # Laisser vide si pas de proxy
$config.SyncFromMicrosoftUpdate  = $true
$config.Save()

# Ajouter les langues et produits à synchroniser
$sub = $wsus.GetSubscription()
$sub.StartSynchronizationForCategoryOnly() # Synchronisation catalogues d'abord

# Attendre la fin
do {
    Start-Sleep -Seconds 15
    $progress = $sub.GetSynchronizationProgress()
    Write-Host "Phase : $($progress.Phase) — $($progress.ProcessedItems)/$($progress.TotalItems)"
} while ($progress.Phase -ne [Microsoft.UpdateServices.Administration.SynchronizationPhase]::Idle)

3. Structure des groupes d'ordinateurs recommandée

Groupe WSUS Contenu Délai de déploiement
Test-Pilots 5 machines représentatives J+0 (immédiat)
Postes-Préproduction Postes utilisateurs —lab J+7
Postes-Production Tous les postes J+14
Serveurs-NonCritiques Serveurs secondaires J+14 (nuit)
Serveurs-Critiques DCs, Exchange, SQL J+21 (maintenance window)

4. Affecter les machines aux groupes via GPO

# GPO : Computer Configuration > Administrative Templates
# > Windows Components > Windows Update > Manage end-user experience
# "Specify intranet Microsoft update service location"
# → Valeur : http://SRV-WSUS01:8530

# "Enable client-side targeting"
# → Valeur : Postes-Production  (ou le nom du groupe WSUS)

5. Approbation automatique et règles

# Créer une règle d'approbation automatique pour les mises à jour critiques
# (sur le groupe Test-Pilots après synchronisation)
$rule = $wsus.CreateInstallApprovalRule("Auto-Critical-Pilot")
$rule.Enabled = $true

$cats = $wsus.GetUpdateClassifications()
$critClassId = ($cats | Where-Object { $_.Title -eq "Critical Updates" }).Id
$secClassId  = ($cats | Where-Object { $_.Title -eq "Security Updates" }).Id
$rule.SetUpdateClassifications($cats | Where-Object { $_.Id -in $critClassId, $secClassId })

$pilotGroup = $wsus.GetComputerTargetGroups() | Where-Object { $_.Name -eq "Test-Pilots" }
$rule.SetComputerTargetGroups($pilotGroup)
$rule.Save()

6. Maintenance et nettoyage WSUS

# Lancer le nettoyage WSUS (planifier mensuellement)
$cleanup = $wsus.GetCleanupManager()
$scope   = New-Object Microsoft.UpdateServices.Administration.CleanupScope
$scope.CleanupObsoleteUpdates        = $true
$scope.CleanupUnneededContentFiles   = $true
$scope.CompressUpdates               = $true
$scope.CleanupObsoleteComputers      = $true
$scope.DeclineExpiredUpdates         = $true
$scope.DeclineSupersededUpdates      = $true

$result = $cleanup.PerformCleanup($scope)
Write-Host "Espace libéré : $([math]::Round($result.DiskSpaceFreed / 1GB, 2)) Go"
Write-Host "Mises à jour expirées déclinées : $($result.ExpiredUpdatesDeclined)"
Write-Host "Mises à jour remplacées déclinées : $($result.SupersededUpdatesDeclined)"

7. Rapport de conformité mensuel

# Générer un rapport de conformité (% machines à jour)
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("SRV-WSUS01", $false, 8530)
$scope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope

$computers = $wsus.GetComputerTargets($scope)
$total = $computers.Count
$upToDate = ($computers | Where-Object { $_.GetUpdateInstallationInfoForComputerTarget(
    (New-Object Microsoft.UpdateServices.Administration.UpdateScope)
).FailedCritical -eq 0 }).Count

$pct = [math]::Round($upToDate / $total * 100, 1)
Write-Host "Conformité du parc : $pct% ($upToDate/$total machines sans mise à jour critique manquante)"

Conclusion

WSUS bien configuré avec des groupes progressifs et des règles d'approbation automatique vous permet de maintenir votre parc à jour de façon maîtrisée, en préservant les fenêtres de maintenance des systèmes critiques. Couplé à Azure Update Manager, vous unifiez la gestion des mises à jour cloud et on-premises.

MAKHZOUM Hussein
Auteur
MAKHZOUM Hussein
Consultant Cloud & Infrastructure Engineer
Voir le profil

Articles similaires