Windows Server 2019 : corriger l’échec des mises à jour cumulatives Patch Tuesday (SFC, DISM, SSU, WSUS)

Depuis deux mois, les mises à jour cumulatives refusent de s’installer sur votre serveur Windows Server 2019 ? Voici une méthode de remédiation pas à pas, éprouvée sur le terrain, pour rétablir Windows Update, installer la KB manuellement et remettre le serveur en conformité sans réinstallation.

Sommaire

Contexte et symptômes

Un serveur sous Windows Server 2019 n’arrive plus à appliquer les correctifs mensuels (Patch Tuesday). Le téléchargement peut fonctionner mais l’installation échoue systématiquement, parfois avec un code d’erreur générique, un redémarrage en boucle, ou un état « En attente » qui ne progresse jamais. Les causes typiques incluent une corruption du magasin de composants, une pile de maintenance (SSU) obsolète, un cache Windows Update endommagé, des conflits pilotes, un manque d’espace disque ou des stratégies d’entreprise (GPO/WSUS) mal alignées.

Plan d’action recommandé

Appliquez la séquence suivante, du diagnostic rapide vers les remédiations plus profondes.

ObjectifCommandes / opérationsDétails et conseils pratiques
Vérifier l’intégrité du systèmesfc /scannow DISM /Online /Cleanup-Image /RestoreHealthSFC répare les fichiers système corrompus. DISM retélécharge et remet en état l’image système si nécessaire. Redémarrer le serveur si des corrections ont été appliquées.
Installer manuellement la mise à jourCréer les dossiers : C:\Temp et C:\Temp\Cab Télécharger le correctif (.msu) correspondant à la KB depuis Microsoft Update Catalog vers C:\Temp Extraire le .cab : expand -F:* C:\Temp\NomKB.msu C:\Temp\Cab Injecter le paquet : DISM /Online /Add-Package /PackagePath:C:\Temp\Cab\NomKB.cabCette méthode contourne le service Windows Update et force l’installation hors‑ligne. Redémarrer le serveur à la fin.
Réinitialiser Windows UpdateArrêter les services wuauserv et bits Renommer C:\Windows\SoftwareDistribution en SoftwareDistribution.old Relancer les servicesSupprime le cache local corrompu. Rechercher ensuite les mises à jour via l’interface GUI ou sconfig (Server Core).
Vérifier les prérequisInstaller la dernière SSU (Servicing Stack Update) avant la CU (Cumulative Update) si elle est fournie séparément. Contrôler l’espace disque : ≥ 2 Go libres sur C:\ (idéalement 5–8 Go).L’absence d’une SSU récente est une cause fréquente d’échec. Le manque d’espace empêche la phase de staging.
Analyser les journaux en cas d’échec persistantC:\Windows\Logs\CBS\CBS.log Get-WindowsUpdateLog pour générer WindowsUpdate.logRechercher les erreurs 0x8007xxxx, 0x800f081f, 0x80073701, etc., pour cibler la remédiation (fichier manquant, conflit pilote, contenu source, réseau/WSUS).
Alternatives en environnement d’entrepriseSynchroniser manuellement la KB sur WSUS puis approuver. Utiliser Windows Update for Business ou Endpoint Manager pour un déploiement hors‑bande.Garantit la cohérence sur un parc serveur et conserve la traçabilité.

Procédure détaillée

Vérifier et réparer l’intégrité de l’image

Exécutez la vérification système dans une console CMD ou PowerShell en mode administrateur :

sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth
  • SFC doit se terminer par « La protection des ressources Windows a trouvé et réparé des fichiers endommagés » ou « n’a trouvé aucune violation ». En cas de réparation, redémarrez.
  • DISM répare le magasin de composants (WinSxS). Si l’accès Internet est restreint, fournissez une source locale (ISO du même build) : DISM /Online /Cleanup-Image /RestoreHealth /Source:D:\sources\sxs /LimitAccess

Installer une KB en mode hors‑ligne

La méthode hors‑ligne évite les aléas du service Windows Update :

  1. Préparer les dossiers : mkdir C:\Temp mkdir C:\Temp\Cab
  2. Copier le fichier .msu de la KB ciblée vers C:\Temp (depuis votre dépôt interne/WSUS/catalogue).
  3. Extraire le contenu pour obtenir le .cab : expand -F:* C:\Temp\KB<numéro>.msu C:\Temp\Cab
  4. Injecter le package : DISM /Online /Add-Package /PackagePath:C:\Temp\Cab\KB<numéro>.cab /NoRestart
  5. Redémarrer le serveur, puis vérifier : Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10

Alternative : vous pouvez aussi déclencher l’installation de l’.msu directement :

wusa.exe C:\Temp\KB<numéro>.msu /quiet /norestart

Si l’installation échoue en online servicing, retestez après nettoyage du composant (voir ci‑dessous) et assurez‑vous que la SSU requise est présente.

Réinitialiser Windows Update en toute sécurité

Cette opération recrée le cache local. Elle est sans risque pour l’OS, mais supprime l’historique local des téléchargements.

net stop wuauserv
net stop bits
net stop cryptsvc
net stop msiserver

ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old

net start cryptsvc
net start bits
net start wuauserv
net start msiserver 

Après redémarrage, lancez une détection manuelle :

UsoClient StartScan
UsoClient StartDownload
UsoClient StartInstall

Sur Server Core, utilisez sconfig pour déclencher un scan et ajuster la politique d’installation.

Vérifier les prérequis et conditions bloquantes

  • Pile de maintenance (SSU) : sur certaines versions, la SSU est publiée séparément. Installez‑la avant la CU si elle est proposée distinctement pour votre mois/KB. Si la CU réclame une SSU plus récente, installez d’abord la SSU hors‑ligne puis la CU.
  • Espace disque : visez au minimum 2 Go libres sur C:\ (5–8 Go recommandés). Libérez via composants : DISM /Online /Cleanup-Image /AnalyzeComponentStore DISM /Online /Cleanup-Image /StartComponentCleanup Attention : l’option /ResetBase (non montrée ici) rend irréversible la désinstallation de correctifs ; à réserver aux images de référence.
  • Redémarrage en attente : s’il existe une mise à jour en attente, certaines CU refusent de s’installer. Vérifiez et redémarrez si nécessaire : Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending' -ErrorAction SilentlyContinue
  • Antivirus/EDR : mettez temporairement en « mode maintenance » pendant l’installation si le produit impose un contrôle strict des fichiers système.

Analyser les journaux pour cibler la remédiation

Générez et ouvrez le journal Windows Update :

Get-WindowsUpdateLog -LogPath $env:USERPROFILE\Desktop\WindowsUpdate.log

Puis inspectez le journal CBS, pivot des échecs de servicing :

notepad C:\Windows\Logs\CBS\CBS.log

Recherchez les signatures suivantes :

  • 0x800f081f (source files could not be found) : fournir une /Source valide à DISM (ISO identique au build), vérifier l’accès à Windows Update si /LimitAccess non utilisé.
  • 0x80073701 / 0x800f0984 (assembly missing/component store corrupt) : SFC + DISM, puis installation hors‑ligne de la KB.
  • 0x8024401c / 0x8024402c (problème WSUS/proxy) : vérifier la connectivité vers les services Windows Update et la configuration du proxy système (netsh winhttp show proxy).
  • 0x80070020 (sharing violation) : arrêter les processus en conflit, relancer en mode minimal.
  • 0x800705b4 (timeout) : vérifier BITS et réseau, relancer la détection après reset du cache.
Code d’erreurIndicationActions ciblées
0x800f081fContenu source manquantMonter l’ISO correspondant et exécuter DISM ... /Source:D:\sources\sxs. Retenter l’ajout du package .cab.
0x80073701Assembly WinSxS manquantsfc + dism /restorehealth, puis installation hors‑ligne. Vérifier CBS.log pour l’assembly fautif.
0x8024401cProblème WSUS/proxyValider l’URL WSUS, autoriser les domaines windowsupdate, corriger le proxy winhttp, relancer BITS.
0x800f0984/82/88Magasin composants incohérentStartComponentCleanup, reset WU, réinstaller SSU puis CU.
0x80070020Fichiers verrouillésArrêter services tiers, redémarrer et retenter. Vérifier AV/EDR.

Cas d’usage en environnement d’entreprise

  • WSUS : synchroniser la KB cible, approuver pour le groupe du serveur, forcer la détection (UsoClient StartScan) et valider le rapport de conformité. En cas d’échec, téléverser le .msu dans un package de déploiement et installer en silent.
  • Windows Update for Business / Endpoint Manager : créer une stratégie d’anneaux de mise à jour ou une tâche « remédiation » pour pousser la SSU puis la CU hors‑bande.
  • GPO : éviter un dual‑scan incohérent. Si WSUS est forcé, la stratégie « Ne pas se connecter aux emplacements Windows Update sur Internet » peut bloquer la récupération de contenu de réparation. Ajustez temporairement pour permettre DISM /RestoreHealth si vous ne fournissez pas de /Source locale.

Contrôles réseau et proxy

Les échecs transitoires proviennent souvent du réseau :

  • Vérifiez la résolution DNS et la sortie HTTP/HTTPS vers les services de mise à jour (*.windowsupdate.com, *.update.microsoft.com, *.delivery.mp.microsoft.com, etc.).
  • Confirmez le proxy système : netsh winhttp show proxy netsh winhttp reset proxy
  • Assurez la compatibilité TLS (TLS 1.2 activé côté OS et proxy).

Nettoyage et désamorçage d’une installation bloquée

Si une CU bloque la pile de maintenance (état Pending ou rollback), appliquez ce plan :

  1. Redémarrez et vérifiez qu’aucun redémarrage n’est en attente (voir clé RebootPending).
  2. Nettoyez le magasin de composants : DISM /Online /Cleanup-Image /StartComponentCleanup
  3. Réinitialisez Windows Update (renommer SoftwareDistribution et catroot2 comme vu plus haut).
  4. Réinstallez d’abord la SSU, puis la CU en offline.

Option avancée : pour supprimer une CU défaillante qui persiste, utilisez :

DISM /Online /Get-Packages /Format:Table
DISM /Online /Remove-Package /PackageName:<NomCompletDuPackage> /NoRestart

Prudence : ne supprimez un package que si vous êtes certain de son impact et que vous disposez d’une fenêtre de maintenance.

Script d’automatisation

Ce script PowerShell orchestre la plupart des actions de remédiation. Exécutez‑le en tant qu’administrateur, en adaptant la variable $MsuPath si vous installez une KB en mode hors‑ligne.

param(
  [string]$MsuPath = "C:\Temp\KB.msu",
  [switch]$ResetWU
)

function Invoke-RestartIfPending {
$keys = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired",
"HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations"
)
foreach ($k in $keys) {
if (Test-Path $k) { Write-Host "[!] Redémarrage en attente détecté : $k" -ForegroundColor Yellow; return $true }
}
return $false
}

Write-Host "1/5 SFC" -ForegroundColor Cyan
sfc /scannow

Write-Host "2/5 DISM RestoreHealth" -ForegroundColor Cyan
DISM /Online /Cleanup-Image /RestoreHealth

if ($ResetWU) {
Write-Host "3/5 Reset Windows Update" -ForegroundColor Cyan
Stop-Service wuauserv,bits,cryptsvc,msiserver -Force -ErrorAction SilentlyContinue
Rename-Item "C:\Windows\SoftwareDistribution" "SoftwareDistribution.old" -ErrorAction SilentlyContinue
Rename-Item "C:\Windows\System32\catroot2" "catroot2.old" -ErrorAction SilentlyContinue
Start-Service cryptsvc,bits,wuauserv,msiserver
}

if (Test-Path $MsuPath) {
$cab = "C:\Temp\Cab"
New-Item $cab -ItemType Directory -Force | Out-Null
Write-Host "4/5 Extraction MSU" -ForegroundColor Cyan
expand -F:* $MsuPath $cab | Out-Null
$cabFile = Get-ChildItem $cab -Filter *.cab | Select-Object -First 1
if ($cabFile) {
Write-Host "5/5 Installation package" -ForegroundColor Cyan
DISM /Online /Add-Package /PackagePath:$($cabFile.FullName) /NoRestart
} else {
Write-Warning "Aucun .cab trouvé dans $cab"
}
} else {
Write-Host "Aucune MSU fournie, saut de l'installation hors‑ligne." -ForegroundColor DarkYellow
}

if (Invoke-RestartIfPending) {
Write-Host "Veuillez redémarrer le serveur pour finaliser la réparation." -ForegroundColor Green
}

Validation post‑remédiation

  • Confirmez l’installation des packages récents : DISM /Online /Get-Packages /Format:Table Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10
  • Vérifiez le journal d’historique (module PSWindowsUpdate si présent) : Get-WUHistory | Select-Object -First 20
  • Contrôlez les journaux d’événements : WindowsUpdateClient/Opérationnel (ID 19 = install OK, ID 20 = échec, ID 31 = redémarrage requis).

Surveillance et prévention

Pour éviter qu’un incident similaire ne passe inaperçu, automatisez une vérification hebdomadaire et un rapport d’état.

# Exemple : alerte si une mise à jour a échoué sur les 7 derniers jours
$since = (Get-Date).AddDays(-7)
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-WindowsUpdateClient/Operational'; ID=20; StartTime=$since} |
  Select-Object TimeCreated, Id, Message
  • Surveillez l’espace disque et le taux de fragmentation du magasin de composants (AnalyzeComponentStore).
  • Gardez une politique claire de maintenance : installation de la SSU en amont, fenêtres de redémarrage dédiées, contrôles réseau.
  • Versionnez vos GPO Windows Update et documentez les exceptions (serveurs isolés, DMZ, VMs de test).

Questions fréquentes

Faut‑il toujours redémarrer après DISM /RestoreHealth ?
Oui. Même si l’outil n’impose pas explicitement un reboot, la cohérence du magasin de composants est garantie après redémarrage.

Est‑ce grave de supprimer SoftwareDistribution ?
Non : le dossier sera recréé. Vous perdez simplement le cache et l’historique local de téléchargement.

Dois‑je installer la SSU manuellement chaque mois ?
Pas toujours : selon les publications, la SSU peut être livrée séparément ou incorporée à la CU. Si une CU précise un prérequis de SSU, installez‑la d’abord hors‑ligne.

Je suis derrière WSUS et la réparation DISM échoue
Fournissez une source locale (/Source vers l’ISO) ou autorisez temporairement l’accès aux emplacements de contenu Microsoft pour la phase de réparation.

Un pilote bloque l’installation
Désinstallez/masquez le pilote fautif, redémarrez, puis appliquez la KB. Évitez les drivers non signés sur des serveurs en production.

Résumé opérationnel

  • Contrôlez et réparez l’intégrité (sfc puis dism).
  • Installez la KB en mode hors‑ligne via DISM /Add-Package après extraction du .cab.
  • Si échec, réinitialisez Windows Update (services + SoftwareDistribution + catroot2).
  • Vérifiez les prérequis : SSU et espace disque.
  • Analysez les journaux (CBS.log, WindowsUpdate.log) et corrigez selon le code d’erreur.
  • En entreprise, utilisez WSUS/WUfB/Endpoint Manager pour un déploiement contrôlé et traçable.

Jeu de commandes prêt à copier

Exécutez l’ensemble suivant lors d’une fenêtre de maintenance :

:: 1) Intégrité
sfc /scannow
DISM /Online /Cleanup-Image /RestoreHealth

:: 2) Reset WU (optionnel si échec persiste)
net stop wuauserv & net stop bits & net stop cryptsvc & net stop msiserver
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
net start cryptsvc & net start bits & net start wuauserv & net start msiserver

:: 3) Installation hors‑ligne
mkdir C:\Temp & mkdir C:\Temp\Cab
expand -F:* C:\Temp\KB.msu C:\Temp\Cab
DISM /Online /Add-Package /PackagePath:C:\Temp\Cab\KB.cab /NoRestart

:: 4) Nettoyage/validation
DISM /Online /Cleanup-Image /StartComponentCleanup
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10

:: 5) Journaux
Get-WindowsUpdateLog -LogPath %USERPROFILE%\Desktop\WindowsUpdate.log
notepad C:\Windows\Logs\CBS\CBS.log

Bons réflexes et pièges à éviter

  • Exécuter en administrateur : ouvrez l’Invite de commandes ou PowerShell en mode élevé.
  • Ne pas interrompre un servicing en cours (barre de progression « Ne pas éteindre »).
  • Éviter /ResetBase sur des serveurs en production sans justification.
  • Séparer les changements : pilote, .NET, CU… Installez par étapes pour isoler la cause si un échec survient.
  • Documenter les KB appliquées et les actions menées pour faciliter un futur audit.

Conclusion

En enchaînant contrôle d’intégrité, installation hors‑ligne, réinitialisation de Windows Update et vérifications des prérequis, on résout la grande majorité des blocages de correctifs sur un serveur Windows Server 2019, sans devoir réinstaller le système. Les journaux WindowsUpdate.log et CBS.log donnent les indices décisifs pour corriger de façon ciblée et durable.

Rappels essentiels : redémarrage après toute réparation, exécution en mode administrateur, et mise en place d’une surveillance continue (événements 19/20/31, historique des mises à jour et espace disque) pour prévenir les incidents à l’avenir.

Sommaire