Sur Windows Server 2012 R2, le cumul ESU KB5039294 échoue souvent avec « We couldn’t complete the updates, undoing changes ». Ce guide pratico‑pratique explique les causes probables, les vérifications clefs et la marche à suivre pour réussir l’installation (ou passer à KB5043138).
Contexte et périmètre
Vous observez un refus d’installation de KB5039294 sur plusieurs serveurs Windows Server 2012 R2 alors que les autres mises à jour s’appliquent. Le message le plus visible au redémarrage est : « We couldn’t complete the updates, undoing changes ». Ce comportement est typique lorsque l’environnement n’est pas totalement conforme aux exigences Extended Security Updates (ESU) ou lorsque la pile de maintenance (Servicing Stack) n’est pas à jour.
- Remplacement : KB5039294 est désormais superseded par KB5043138. Dans la majorité des cas, il est pertinent d’installer directement KB5043138.
- Cycle de vie : Windows Server 2012 R2 est en fin de support depuis le 10 octobre 2023. Sans licence ESU valide, les correctifs ESU sont refusés.
- Sans ESU : seules certaines mises à jour security‑only (ex. KB5031419) peuvent encore s’installer, mais pas les cumulatifs ESU.
Symptômes et signaux faibles
- Au redémarrage : « We couldn’t complete the updates, undoing changes » puis restauration de l’état précédent.
- Dans WindowsUpdate.log et l’Observateur d’événements : erreurs génériques Windows Update (WU_E_*) ou Servicing (CBS_E_*) sans code clair.
- Sur les serveurs protégés par un antivirus/EDR : blocages pendant la phase de maintenance hors ligne (offline servicing).
- Via WSUS/SCCM : mise à jour marquée comme Superseded ou non applicable, ou bien en attente d’approbation.
Causes racines les plus probables
- Licence ESU manquante ou non activée (MAK non installé/activé, ou attribution via Azure Arc absente).
- SSU obsolète (Servicing Stack Update incomplet ou non présent), ce qui empêche les cumulatifs ESU de s’appliquer.
- Corruption de l’image (composants CBS/WINSXS incohérents) ou pending operations bloquantes.
- Interférence sécurité (AV/EDR), pilotages disque ou secteurs défectueux sur la partition système.
- Paramétrage WSUS/SCCM inadéquat : règles de supersedence, classifications/produits, approbation, ou client pointant vers un serveur WSUS n’ayant pas synchronisé la nouvelle référence (KB5043138).
- Problèmes de connectivité TLS (TLS 1.2 non activé) pour les serveurs qui vont chercher les mises à jour en ligne.
Plan d’action recommandé
Appliquez le runbook ci‑dessous du haut vers le bas. Chaque étape renvoie à une cause précise. Exécutez les commandes dans une console CMD ou PowerShell élevée (Run as Administrator).
Étape | Action recommandée | Commentaire utile |
---|---|---|
1 | Vérifier les journaux Windows Update (C:\Windows\WindowsUpdate.log ) et l’Observateur d’événements (Applications and Services Logs → Microsoft → Windows → WindowsUpdateClient et Setup/CBS). | Les codes d’erreur orientent la cause (ESU absent, SSU manquante, corruption CBS, etc.). |
2 | Installer manuellement la dernière SSU (Servicing Stack Update) avant toute tentative. | À récupérer sur le Microsoft Update Catalog. Une SSU obsolète bloque fréquemment les cumulatifs ESU. |
3 | Confirmer la présence et l’activation d’une licence ESU (clé MAK ou attribution via Azure Arc), puis ré‑essayer. | Sans ESU activé, KB5039294/KB5043138 seront refusés quel que soit l’état du serveur. |
4 | Désactiver temporairement l’antivirus/EDR pendant l’installation. | Certains moteurs bloquent la phase de maintenance hors ligne (TrustedInstaller). |
5 | Installer le correctif manuellement (de préférence KB5043138) via wusa.exe . | Exemple : wusa.exe <KB5043138.msu> /quiet /norestart . Journal détaillé dans %windir%\Logs\CBS\CBS.log . |
6 | Réparer l’image (DISM/SFC) puis ré‑essayer. | DISM /online /cleanup-image /checkhealth DISM /online /cleanup-image /scanhealth DISM /online /cleanup-image /restorehealth sfc /scannow Corrige les incohérences de composants susceptibles de faire échouer la maintenance. |
7 | Vérifier l’intégrité du disque puis redémarrer. | chkdsk C: /f /r dans une fenêtre administrateur (programmera la vérification au prochain démarrage). |
Vérifications détaillées et commandes
Contrôler rapidement le statut Windows Update
Assurez‑vous que les services critiques sont démarrés et en mode correct : Windows Update (wuauserv
), Background Intelligent Transfer Service (BITS
), CryptSvc et TrustedInstaller.
sc query wuauserv
sc query bits
sc query cryptsvc
sc query trustedinstaller
sc config wuauserv start= demand
sc config bits start= demand
sc config cryptsvc start= auto
sc config trustedinstaller start= demand
Consulter les journaux utiles
- WindowsUpdate.log :
C:\Windows\WindowsUpdate.log
- Journaux CBS/Setup :
%windir%\Logs\CBS\CBS.log
etEvent Viewer → Applications and Services Logs → Microsoft → Windows → Servicing
- WindowsUpdateClient : échecs, téléchargements, install handler, etc.
Extraction rapide des erreurs CBS :
findstr /c:"Error" /c:"Failed" %windir%\Logs\CBS\CBS.log > %temp%\cbs_errors.txt
notepad %temp%\cbs_errors.txt
Mettre à jour la SSU avant le cumul ESU
Sur 2012 R2, la Servicing Stack Update est un prérequis strict pour tout cumul. Vérifiez la présence d’une SSU récente :
dism /online /get-packages | findstr /i "servicing stack"
wmic qfe get HotFixID,Description,InstalledOn | findstr /i "servicing stack"
Si la SSU est absente/ancienne, installez‑la avant KB5043138 ; appliquez ensuite un redémarrage contrôlé.
Vérifier et activer ESU
Scénario MAK : une clé de produit ESU (par édition/année) doit être installée et activée.
cscript //nologo %windir%\system32\slmgr.vbs /ipk <VOTRE_CLE_ESU>
cscript //nologo %windir%\system32\slmgr.vbs /ato
cscript //nologo %windir%\system32\slmgr.vbs /dlv
Dans la sortie de /dlv
, recherchez les mentions relatives à l’Extended Security Updates. En cas d’échec d’activation, corrigez d’abord la connectivité KMS/Internet (ou activez par téléphone si nécessaire).
Scénario Azure Arc : le serveur doit être onboarded à Azure Arc et associé à une offre ESU valide. Assurez‑vous que l’agent Arc est en ligne et que l’attribution ESU figure bien sur la ressource. Si le serveur est déconnecté (air‑gapped), privilégiez le scénario MAK.
Installer KB5043138 manuellement
La voie la plus fiable consiste à télécharger le package .msu
puis à utiliser wusa.exe
en mode silencieux :
wusa.exe <Windows8.1-KB5043138-x64.msu> /quiet /norestart
Si wusa
retourne une erreur générique, vous pouvez tenter l’installation via DISM après extraction :
mkdir C:\Temp\KB
expand -F:* <Windows8.1-KB5043138-x64.msu> C:\Temp\KB
dism /online /add-package /packagepath:C:\Temp\KB\*.cab
dism /online /cleanup-image /startcomponentcleanup
Vérifiez ensuite la présence du correctif :
wmic qfe list | findstr /i "KB5043138"
Get-HotFix -Id KB5043138
Réparer l’image, corriger les pending et nettoyer les dossiers de mise à jour
Exécutez la séquence DISM/SFC, puis réinitialisez les dossiers de cache Windows Update si l’échec persiste.
DISM /online /cleanup-image /checkhealth
DISM /online /cleanup-image /scanhealth
DISM /online /cleanup-image /restorehealth
sfc /scannow
Réinitialisation SoftwareDistribution/Catroot2 (arrête les services, renomme les dossiers, relance) :
net stop wuauserv
net stop bits
net stop cryptsvc
net stop trustedinstaller
ren %systemroot%\SoftwareDistribution SoftwareDistribution.bak
ren %systemroot%\System32\catroot2 catroot2.bak
net start cryptsvc
net start bits
net start wuauserv
net start trustedinstaller
Note : si vous utilisez WSUS, la réinitialisation forcera une restauration de la base de métadonnées côté client.
Gérer l’antivirus/EDR pendant la maintenance
Certains moteurs interceptent les opérations de servicing. Créez des exceptions temporaires (ou désactivez le self‑protection) pour :
%windir%\servicing\TrustedInstaller.exe
%windir%\winsxs\
et%windir%\SoftwareDistribution\
- Processus :
TiWorker.exe
,wuauclt.exe
,wusa.exe
,dism.exe
Réactivez la protection immédiatement après l’installation.
Vérifier l’intégrité disque et le système de fichiers
Les cumulatifs ESU sollicitent fortement le magasin de composants (WinSxS). Des secteurs défectueux peuvent provoquer un retour arrière silencieux.
chkdsk C: /f /r
shutdown /r /t 5
Erreurs fréquentes et interprétation
Code/Message | Interprétation courante | Action prioritaire |
---|---|---|
« We couldn’t complete the updates… » | Échec en phase offline (rollback post‑boot) | Consulter CBS.log, vérifier ESU/SSU, tenter installation manuelle |
0x800f0922 / 0x800f0988 | Échec de maintenance CBS ou composant non applicable | DISM/SFC, SSU récente, startcomponentcleanup |
0x8024200D / 0x80246007 | Cache de téléchargement corrompu | Réinitialiser SoftwareDistribution/Catroot2 |
0x80070490 | Élément introuvable / composants incohérents | DISM /restorehealth, SFC |
0xC1900101 | Conflit pilote/antivirus | Mettre à jour pilotes/BIOS/firmware, désactiver EDR |
Spécificités WSUS et Configuration Manager
- Produits/Classification : inclure le produit Windows Server 2012 R2 et les classifications Security Updates/Updates.
- Supersedence : KB5043138 remplace KB5039294. Si votre stratégie refuse les mises à jour Superseded, l’ancienne référence peut rester en attente/échec. Approuvez la nouvelle et désapprouvez les anciennes si nécessaire.
- Déploiement : privilégiez un maintenance window dédié (redémarrage autorisé), et vérifiez que l’agent pointe bien sur le bon serveur WSUS (
HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
). - Logs clients :
%windir%\WindowsUpdate.log
,C:\Windows\CCM\Logs\WUAHandler.log
(si ConfigMgr),UpdatesDeployment.log
,CAS.log
.
Connectivité et exigences TLS
Pour un téléchargement direct depuis Microsoft, assurez‑vous que la machine peut établir des sessions TLS 1.2 vers les services de mise à jour sur les ports 80/443. Sur 2012 R2, TLS 1.2 est disponible mais parfois non activé par défaut pour certains contextes.
Activation rapide TLS 1.2 (redémarrage requis) :
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f
Procédure automatisée en PowerShell
Le script ci‑dessous orchestre les contrôles essentiels : vérification de l’OS, SSU, ESU, nettoyage des caches, réparation de l’image, puis tentative d’installation d’un package fourni. Adaptez‑le à votre standard d’entreprise.
#requires -RunAsAdministrator
param(
[string]$PackagePath, # Chemin du .msu KB5043138 (optionnel)
[switch]$NoAVToggle # N'essaie pas de désactiver l'AV (recommandé)
)
function Write-Section($t){ Write-Host "`n==== $t ====" -ForegroundColor Cyan }
function Test-Os2012R2 {
try {
$os = Get-CimInstance Win32_OperatingSystem
return ($os.Caption -like "*Windows Server 2012 R2*")
} catch { return $false }
}
function Get-SSUInfo {
$dism = (dism /online /get-packages) 2>&1
$ssu = $dism | Select-String -Pattern "Servicing Stack"
return $ssu
}
function Test-ESU {
$tmp = Join-Path $env:TEMP ("dlv_{0}.txt" -f (Get-Random))
$out = & cscript.exe //nologo "$env:windir\system32\slmgr.vbs" /dlv | Tee-Object -FilePath $tmp
$esu = ($out | Select-String -Pattern "Extended Security Updates|ESU|Extended Security")
[pscustomobject]@{
HasESU = [bool]$esu
Report = $tmp
}
}
function Reset-WUCache {
Write-Host "Arrêt des services Windows Update..." -ForegroundColor Yellow
Stop-Service wuauserv,bits,cryptsvc -Force -ErrorAction SilentlyContinue
Start-Sleep -Seconds 2
$sd = Join-Path $env:windir "SoftwareDistribution"
$cr = Join-Path $env:windir "System32\catroot2"
if (Test-Path $sd) { Rename-Item $sd "$($sd).bak_$(Get-Date -f yyyyMMddHHmmss)" -Force }
if (Test-Path $cr) { Rename-Item $cr "$($cr).bak_$(Get-Date -f yyyyMMddHHmmss)" -Force }
Start-Service cryptsvc,bits,wuauserv
}
function Repair-Image {
Write-Section "Réparation DISM/SFC"
dism /online /cleanup-image /checkhealth
dism /online /cleanup-image /scanhealth
dism /online /cleanup-image /restorehealth
sfc /scannow
}
function Install-MSU([string]$path){
if (-not (Test-Path $path)) { throw "Fichier introuvable: $path" }
Write-Section "Installation $([IO.Path]::GetFileName($path))"
$p = Start-Process -FilePath wusa.exe -ArgumentList "`"$path`" /quiet /norestart" -PassThru -Wait
return $p.ExitCode
}
if (-not (Test-Os2012R2)) {
Write-Error "Ce script est prévu pour Windows Server 2012 R2."
exit 1
}
Write-Section "Vérification SSU"
$ssu = Get-SSUInfo
if (-not $ssu) {
Write-Warning "Aucune SSU détectée dans DISM /get-packages. Pensez à installer la dernière SSU avant le cumul ESU."
} else {
$ssu | Out-Host
}
Write-Section "Vérification ESU"
$esu = Test-ESU
if (-not $esu.HasESU) {
Write-Warning "Aucune mention ESU détectée. Installez/activez la licence ESU (MAK ou Azure Arc). Rapport: $($esu.Report)"
} else {
Write-Host "ESU semble présent (voir rapport $($esu.Report))." -ForegroundColor Green
}
Write-Section "Réinitialisation cache Windows Update"
Reset-WUCache
Repair-Image
if ($PackagePath) {
$code = Install-MSU -path $PackagePath
Write-Host "wusa.exe a retourné le code $code"
Write-Host "Vérifiez %windir%\Logs\CBS\CBS.log et redémarrez si nécessaire."
} else {
Write-Host "Aucun package fourni (-PackagePath). Téléchargez KB5043138 puis relancez le script avec le chemin du .msu."
}
Bonnes pratiques de déploiement
- Fenêtre de maintenance : planifiez un créneau avec redémarrage autorisé. Les cumulatifs ESU effectuent des opérations « offline ».
- Snapshots : sur VM, prenez un snapshot avant la tentative. Sur physique, validez la sauvegarde bare‑metal.
- Un seul correctif à la fois : évitez les « bundles » concurrents. Appliquez d’abord la SSU, redémarrez, puis le cumul ESU.
- Supervision : surveillez TiWorker.exe et l’occupation disque (WinSxS) durant l’opération.
Check‑list express
- Je dispose d’une licence ESU valide et activée (MAK ou Azure Arc).
- La SSU la plus récente pour 2012 R2 est installée.
- Les services WUAUSERV/BITS/TrustedInstaller sont opérationnels.
- Le serveur a un accès sortant TLS 1.2 (si Windows Update en ligne).
- L’antivirus/EDR est mis en pause pendant la maintenance.
- Le cache WU a été réinitialisé en cas d’échecs répétés.
- DISM/SFC exécutés, aucune corruption résiduelle détectée.
- En environnement WSUS/SCCM, KB5043138 est approuvé et KB5039294 n’est plus imposé s’il est superseded.
Questions fréquentes
Faut‑il forcer l’installation de KB5039294 si KB5043138 est disponible ?
Non. Installez directement KB5043138, qui remplace KB5039294. Cela réduit les risques d’échec et vous place sur le dernier niveau de sécurité ESU.
Sans ESU, puis‑je tout de même corriger mes serveurs ?
Sans ESU, vous ne pourrez pas appliquer les cumulatifs ESU. Certaines mises à jour security‑only (comme KB5031419) peuvent encore être proposées, mais ce n’est pas équivalent à la protection fournie par les cumulatifs ESU.
Dois‑je nettoyer WinSxS avant d’installer le cumul ?
Pas nécessaire en temps normal. En cas d’échec récurrent, exécutez DISM /online /cleanup-image /startcomponentcleanup
. Attention : l’option /ResetBase
(si disponible) empêche la désinstallation de mises à jour.
Comment prouver qu’ESU est bien pris en compte ?
Outre slmgr /dlv
, l’Observateur d’événements doit cesser d’indiquer des refus d’applicabilité pour les mises à jour ESU, et Get-HotFix
doit recenser les KB ESU après installation.
Pourquoi l’installation fonctionne sur certains serveurs et pas d’autres ?
Les différences viennent souvent d’une SSU non homogène, d’un AV/EDR plus strict, d’un stockage fatigué ou d’une configuration WSUS distincte. Uniformisez ces éléments et rejouez l’installation.
Recommandations de sortie de crise
- Priorité sécurité : si ESU n’est pas envisageable à court terme, appliquez au minimum les security‑only encore disponibles, isolez les serveurs exposés et durcissez la surface d’attaque (RDP, SMB, TLS).
- Trajectoire durable : planifiez une mise à niveau vers Windows Server 2016 ou version supérieure, ou migrez les charges vers une plateforme supportée.
Conclusion opérationnelle
Dans la plupart des cas, l’échec d’installation de KB5039294 sur Windows Server 2012 R2 se résume à deux causes : ESU non activé et/ou SSU obsolète. Alignez d’abord ces prérequis, puis privilégiez l’installation directe de KB5043138 (qui le remplace). En cas d’échecs répétés, désactivez temporairement les protections tierces, réinitialisez le cache Windows Update, réparez l’image (DISM/SFC), contrôlez le disque et, si nécessaire, installez le package manuellement avec wusa.exe
ou dism /add-package
. Cette méthode, éprouvée sur le terrain, permet de rétablir un cycle de patching fiable en environnement ESU.
Rappel : Windows Server 2012 R2 étant en fin de support depuis le 10/10/2023, ESU étend les correctifs jusqu’en 2026. Sans ESU, la surface de risque reste élevée : ne considérez la poursuite d’exploitation qu’avec des mesures compensatoires fortes et une trajectoire de modernisation planifiée.