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.
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.
Objectif | Commandes / opérations | Détails et conseils pratiques |
---|---|---|
Vérifier l’intégrité du système | sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth | SFC 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 à jour | Cré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.cab | Cette méthode contourne le service Windows Update et force l’installation hors‑ligne. Redémarrer le serveur à la fin. |
Réinitialiser Windows Update | Arrêter les services wuauserv et bits Renommer C:\Windows\SoftwareDistribution en SoftwareDistribution.old Relancer les services | Supprime le cache local corrompu. Rechercher ensuite les mises à jour via l’interface GUI ou sconfig (Server Core). |
Vérifier les prérequis | Installer 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 persistant | C:\Windows\Logs\CBS\CBS.log Get-WindowsUpdateLog pour générer WindowsUpdate.log | Rechercher les erreurs 0x8007xxxx , 0x800f081f , 0x80073701 , etc., pour cibler la remédiation (fichier manquant, conflit pilote, contenu source, réseau/WSUS). |
Alternatives en environnement d’entreprise | Synchroniser 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 :
- Préparer les dossiers :
mkdir C:\Temp mkdir C:\Temp\Cab
- Copier le fichier
.msu
de la KB ciblée versC:\Temp
(depuis votre dépôt interne/WSUS/catalogue). - Extraire le contenu pour obtenir le
.cab
:expand -F:* C:\Temp\KB<numéro>.msu C:\Temp\Cab
- Injecter le package :
DISM /Online /Add-Package /PackagePath:C:\Temp\Cab\KB<numéro>.cab /NoRestart
- 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’erreur | Indication | Actions ciblées |
---|---|---|
0x800f081f | Contenu source manquant | Monter l’ISO correspondant et exécuter DISM ... /Source:D:\sources\sxs . Retenter l’ajout du package .cab. |
0x80073701 | Assembly WinSxS manquant | sfc + dism /restorehealth , puis installation hors‑ligne. Vérifier CBS.log pour l’assembly fautif. |
0x8024401c | Problème WSUS/proxy | Valider l’URL WSUS, autoriser les domaines windowsupdate, corriger le proxy winhttp , relancer BITS. |
0x800f0984/82/88 | Magasin composants incohérent | StartComponentCleanup , reset WU, réinstaller SSU puis CU. |
0x80070020 | Fichiers verrouillés | Arrê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 :
- Redémarrez et vérifiez qu’aucun redémarrage n’est en attente (voir clé
RebootPending
). - Nettoyez le magasin de composants :
DISM /Online /Cleanup-Image /StartComponentCleanup
- Réinitialisez Windows Update (renommer
SoftwareDistribution
etcatroot2
comme vu plus haut). - 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
puisdism
). - 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.