Windows 10 KB5034441 échoue après WDS 2012 : corriger WinRE (≥ 1 Go), DISM/PowerShell & automatisation

Vous déployez Windows 10 via WDS 2012 et KB5034441 échoue faute de partition WinRE ? Voici des procédures fiables pour corriger l’image, automatiser le redimensionnement, éviter les actions manuelles et préparer la migration.

Sommaire

Problématique : échec du correctif KB5034441 après déploiement d’images Windows 10 via WDS 2012

Contexte

  • Environnement : Windows Deployment Services (WDS) sous Windows Server 2012 (fin de support le 10 octobre 2023) pour déployer quotidiennement des images .wim Windows 10 préparées avec Sysprep.
  • Symptôme : dès l’exécution de Windows Update sur des postes fraîchement installés, l’installation de KB5034441 échoue avec un message indiquant qu’aucune partition WinRE adéquate n’est trouvée ou qu’elle est trop petite.

Pourquoi cela casse-t-il maintenant ?

KB5034441 est une mise à jour de sécurité du composant Windows Recovery Environment (WinRE) qui impose que la partition de récupération dispose d’au moins 750 Mo (recommandé : 1 Go) pour accueillir un WinRE.wim plus volumineux. Or, beaucoup d’images historiques créent une partition WinRE d’environ 300 Mo — voire aucune partition dédiée — ce qui provoque un échec systématique de l’installation sur chaque machine déployée. À 40 PC/jour, une correction manuelle poste par poste est inenvisageable.

Ce qu’il faut retenir en deux lignes

  • La cause racine est structurelle : la partition WinRE est absente ou trop petite. Corrigez-la dans votre pipeline plutôt que sur chaque poste.
  • Visez 1 Go pour WinRE et automatisez l’agrandissement ou la création via script (post‑déploiement MDT/WDS) ou via un gabarit de partitionnement (unattend.xml/TS MDT).

Solutions envisageables

ApprocheDétailsAutomatisation
Mettre à jour l’image maîtresse hors lignePréparez un gabarit de partitionnement (unattend.xml/MDT) avec Recovery ≥ 1 Go. Mettez à jour WinRE.wim dans l’image : DISM pour intégrer KB5034441 au WinRE de l’image (voir tutoriel). Réintégrez l’image corrigée dans WDS/MDT. Note : on ne « redimensionne » pas une partition à l’intérieur d’un WIM. La taille de la partition Recovery se définit lors du déploiement (unattend/Task Sequence).Oui, via scripts de build d’image.
Script post‑déploiement (WDS/MDT)Dans la phase PostInstall/Task Sequence, lancez un script qui : détecte l’état WinRE (reagentc /info, Get-Partition), crée ou agrandit la partition Recovery (1 Go) en réduisant C: si nécessaire, met à jour WinRE et réactive (reagentc /enable). Le script Microsoft ReSize‑WinREPartition.ps1 (associé à KB5028997) est la base recommandée : robuste et idempotent.Oui, 100 % automatisable.
Reporter KB5034441Masquez/retardez temporairement l’update au niveau WSUS (refuser l’approbation) ou avec des politiques Windows Update for Business. En PowerShell, le module PSWindowsUpdate permet de masquer une KB (Hide-WindowsUpdate), si vous l’utilisez déjà. Important : wusa.exe ne dispose pas d’un commutateur /hide. Le masquage via script requiert WSUS/WUfB ou des outils dédiés.Partiel : palliatif, ne corrige pas WinRE.
Migrer l’infrastructure WDSWindows Server 2019/2022 (ou 2012 R2 + ESU) avec ADK/WinPE récents simplifie la conformité WinRE et les Task Sequences (MDT/SCCM/Intune).

Plan d’action recommandé

  1. Corriger l’image de référence et le partitionnement : visez WinRE 1 Go dans l’unattend/TS et pré‑mettez à jour WinRE.wim avec KB5034441.
  2. Automatiser côté poste : intégrez un script post‑déploiement (basé sur ReSize‑WinREPartition.ps1) pour traiter les cas limites.
  3. Temporiser côté WSUS : si besoin, masquez KB5034441 le temps de déployer l’automatisation, puis réactivez‑la.
  4. Mettre à jour l’ADK/WinPE : utilisez l’ADK/WinPE 10 22H2 sur la machine d’admin et le serveur de déploiement.
  5. Planifier la sortie de Windows Server 2012 : sa fin de support entraîne un risque durable sur les mises à jour.

Tutoriel — Option A : corriger l’image maîtresse et le partitionnement

Prérequis

  • ADK/WinPE 10 22H2 (ou plus récent) sur le poste d’administration.
  • Image .wim de référence (sysprep) montable avec DISM.
  • Paquet KB5034441 (format .cab ou .msu extrait).

Définir un partitionnement conforme (unattend.xml)

Adaptez votre unattend.xml (ou la séquence MDT « Format and Partition Disk ») pour créer une partition Recovery à la fin du disque d’au moins 1024 Mo. Exemples simplifiés :

UEFI/GPT (recommandé)

<DiskConfiguration>
  <Disk wcm:action="add">
    <DiskID>0</DiskID>
    <WillWipeDisk>true</WillWipeDisk>
    <CreatePartitions>
      <CreatePartition wcm:action="add"><Order>1</Order><Type>EFI</Type><Size>100</Size></CreatePartition>
      <CreatePartition wcm:action="add"><Order>2</Order><Type>MSR</Type><Size>16</Size></CreatePartition>
      <CreatePartition wcm:action="add"><Order>3</Order><Type>Primary</Type><Extend>true</Extend></CreatePartition>
      <CreatePartition wcm:action="add"><Order>4</Order><Type>Recovery</Type><Size>1024</Size></CreatePartition>
    </CreatePartitions>
    <ModifyPartitions>
      <ModifyPartition><PartitionID>1</PartitionID><Format>FAT32</Format><Label>SYSTEM</Label></ModifyPartition>
      <ModifyPartition><PartitionID>3</PartitionID><Format>NTFS</Format><Label>Windows</Label><Letter>C</Letter></ModifyPartition>
      <ModifyPartition><PartitionID>4</PartitionID><Format>NTFS</Format><Label>WinRE</Label></ModifyPartition>
    </ModifyPartitions>
  </Disk>
</DiskConfiguration>

BIOS/MBR (héritage)

<DiskConfiguration>
  <Disk wcm:action="add">
    <DiskID>0</DiskID>
    <WillWipeDisk>true</WillWipeDisk>
    <CreatePartitions>
      <CreatePartition wcm:action="add"><Order>1</Order><Type>Primary</Type><Size>100</Size></CreatePartition>   <!-- System -->
      <CreatePartition wcm:action="add"><Order>2</Order><Type>Primary</Type><Extend>true</Extend></CreatePartition>  <!-- Windows -->
      <CreatePartition wcm:action="add"><Order>3</Order><Type>Primary</Type><Size>1024</Size></CreatePartition>  <!-- Recovery -->
    </CreatePartitions>
    <ModifyPartitions>
      <ModifyPartition><PartitionID>1</PartitionID><Active>true</Active><Format>NTFS</Format><Label>SYSTEM</Label></ModifyPartition>
      <ModifyPartition><PartitionID>2</PartitionID><Format>NTFS</Format><Label>Windows</Label><Letter>C</Letter></ModifyPartition>
      <ModifyPartition><PartitionID>3</PartitionID><Format>NTFS</Format><Label>WinRE</Label></ModifyPartition>
    </ModifyPartitions>
  </Disk>
</DiskConfiguration>

Mettre à jour WinRE dans l’image

Même avec une partition suffisante, pré‑mettre à jour WinRE.wim dans l’image évite un passage par Windows Update.

  1. Montez l’image OS : mkdir C:\Mount DISM /Mount-Image /ImageFile:"D:\Images\install.wim" /Index:1 /MountDir:"C:\Mount"
  2. Localisez le WinRE de l’image : set WINRE=C:\Mount\Windows\System32\Recovery\Winre.wim Si absent, copiez un Winre.wim sain depuis une image ISO Windows 10 correspondante.
  3. Montez WinRE et injectez la KB : mkdir C:\MountRE DISM /Mount-Wim /WimFile:"%WINRE%" /Index:1 /MountDir:"C:\MountRE" DISM /Image:"C:\MountRE" /Add-Package /PackagePath:"D:\Packs\KB5034441.cab" DISM /Unmount-Wim /MountDir:"C:\MountRE" /Commit
  4. Validez et démontez : DISM /Unmount-Image /MountDir:"C:\Mount" /Commit
  5. Réintégrez le WIM dans WDS/MDT.

Important : l’intégration de KB5034441 dans WinRE.wim n’agrandit pas la partition Recovery au moment du déploiement. Assurez‑vous que votre unattend/TS crée bien une partition de 1 Go.

Tutoriel — Option B : script post‑déploiement idempotent

Quand l’utiliser ?

Quand vous ne pouvez pas remplacer l’image immédiatement, ajoutez un script de correction à la fin de la Task Sequence (avant la première exécution de Windows Update). Objectif : créer/agrandir WinRE à 1 Go, mettre à jour WinRE.wim et réactiver WinRE.

Pré‑requis de sécurité

  • BitLocker : suspendez‑le pendant l’opération (il sera réactivé ensuite).
  • Exécutez en administrateur dans la TS.

Script PowerShell prêt à l’emploi

Exemple minimaliste, inspiré des recommandations officielles, pour gérer la majorité des parcs UEFI/GPT. Placez‑le dans le partage de déploiement et appelez‑le dans la TS.

# WinRE-Repair.ps1
# Objectif : garantir une partition WinRE &gt;= 1024 Mo, mettre à jour WinRE, réactiver.

$ErrorActionPreference = 'Stop'
$Log = 'C:\Windows\Temp\WinRE-Repair.log'
function Write-Log { param([string]$m) "$((Get-Date).ToString('s'))  $m" | Out-File -FilePath $Log -Append -Encoding utf8 }

Write-Log "=== WinRE-Repair: démarrage ==="

# 1) Suspendre BitLocker si présent
try {
  $blv = Get-BitLockerVolume -ErrorAction SilentlyContinue
  if ($blv) { $blv | Where-Object ProtectionStatus -eq 'On' | Suspend-BitLocker -RebootCount 1 | Out-Null; Write-Log "BitLocker suspendu" }
} catch { Write-Log "BitLocker: non applicable ou erreur bénigne: $($_.Exception.Message)" }

# 2) Vérifier l'état de WinRE
$reagent = (reagentc.exe /info) | Out-String
Write-Log "reagentc /info:`n$reagent"

# 3) Trouver la partition Recovery (GPT : GUID WinRE ; MBR : ID 27)
$disk = Get-Disk | Where-Object PartitionStyle -ne 'RAW' | Sort-Object Number | Select-Object -First 1
$rePart = Get-Partition -DiskNumber $disk.Number | Where-Object { $_.GptType -eq '{DE94BBA4-06D1-4D40-A16A-BFD50179D6AC}' -or $_.MbrType -eq '0x27' } | Select-Object -First 1

if (-not $rePart) { Write-Log "Aucune partition Recovery trouvée. Création..." }

# 4) Taille cible
$targetMB = 1024
$needCreateOrResize = $true
if ($rePart) {
  $sizeMB = [int]([math]::Round($rePart.Size/1MB))
  Write-Log "Partition Recovery détectée: ${sizeMB}MB sur Disk $($disk.Number) (Partition $($rePart.PartitionNumber))"
  if ($sizeMB -ge $targetMB) { $needCreateOrResize = $false; Write-Log "Taille suffisante, pas de redimensionnement." }
}

# 5) Créer/agrandir en fin de disque (réduit C: si nécessaire)
if ($needCreateOrResize) {
  $osPart = Get-Partition -DiskNumber $disk.Number | Where-Object DriveLetter -eq 'C'
  if (-not $osPart) { throw "Partition système C: introuvable" }

  $deltaMB = $targetMB
  Write-Log "Réduction de C: de ${deltaMB}MB"
  Resize-Partition -DriveLetter C -Size ($osPart.Size - ($deltaMB*1MB)) -ErrorAction Stop

  if ($rePart) {
     # supprimer et recréer à la fin (selon layout)
     Write-Log "Suppression de l'ancienne partition Recovery (Partition $($rePart.PartitionNumber))"
     Remove-Partition -DiskNumber $disk.Number -PartitionNumber $rePart.PartitionNumber -Confirm:$false
  }

  Write-Log "Création de la nouvelle partition Recovery (${targetMB}MB)"
  $new = New-Partition -DiskNumber $disk.Number -UseMaximumSize:$false -Size ($targetMB*1MB) -GptType '{DE94BBA4-06D1-4D40-A16A-BFD50179D6AC}'
  Format-Volume -Partition $new -FileSystem NTFS -NewFileSystemLabel 'WinRE' -Confirm:$false | Out-Null
  Set-Partition -DiskNumber $disk.Number -PartitionNumber $new.PartitionNumber -GptType '{DE94BBA4-06D1-4D40-A16A-BFD50179D6AC}' | Out-Null
  $rePart = $new
}

# 6) Monter temporairement la partition Recovery
$letter = ($rePart | Get-Volume).DriveLetter
if (-not $letter) {
  $letter = 'R'
  $null = Set-Partition -DiskNumber $disk.Number -PartitionNumber $rePart.PartitionNumber -NewDriveLetter $letter
}
Write-Log "Partition Recovery montée en ${letter}:"

# 7) (Optionnel) Mettre à jour WinRE.wim : copiez votre KB dans un dossier local & dism /Add-Package
$reDir = "${letter}:\Recovery\WindowsRE"
New-Item -ItemType Directory -Force -Path $reDir | Out-Null
$srcRe = "C:\Windows\System32\Recovery\Winre.wim"
Copy-Item $srcRe -Destination (Join-Path $reDir 'Winre.wim') -Force
Write-Log "Winre.wim copié dans ${reDir}"

# 8) Enregistrer et réactiver WinRE
reagentc.exe /disable | Out-Null
reagentc.exe /setreimage /path $reDir /target C:\Windows | Out-Null
reagentc.exe /enable | Out-Null

# 9) Vérification
$final = (reagentc.exe /info) | Out-String
Write-Log "reagentc /info après correction:`n$final"
Write-Log "=== WinRE-Repair: terminé ==="

Astuce : pour intégrer KB5034441 au WinRE du poste dans ce même script, montez $reDir\Winre.wim avec DISM, ajoutez le package, puis démontez en /Commit. Placez les fichiers CAB/MSU dans un répertoire local (C:\OSD\Packs par ex.).

Option C : reporter KB5034441 en environnement géré

  • WSUS : refusez/retirez temporairement l’approbation de KB5034441 pour les groupes « Postes » ciblés, le temps de déployer l’automatisation WinRE.
  • Windows Update for Business : utilisez des anneaux de déploiement/délais pour éviter les échecs massifs.
  • PSWindowsUpdate (si déjà standardisé) : masquez la KB sur les postes concernés (Hide-WindowsUpdate -KBArticleID KB5034441 -AcceptAll -Verbose).

Limite : c’est un contournement. Il faut tout de même corriger la taille de WinRE avant de réactiver la KB.

Vérifications et validation

Contrôler la taille de la partition WinRE

Get-Partition | Where-Object { $_.GptType -eq '{DE94BBA4-06D1-4D40-A16A-BFD50179D6AC}' -or $_.MbrType -eq '0x27' } |
  Select-Object DiskNumber, PartitionNumber, @{n='Taille(MB)';e={[int]($_.Size/1MB)}}

Contrôler l’état de WinRE

reagentc /info

Attendez : Windows RE status: Enabled et Windows RE location pointant vers la partition Recovery.

Contrôler la réussite de KB5034441

  • Si vous l’intégrez hors ligne : View update history affichera la KB comme installée (ou intégrée).
  • Si vous laissez Windows Update l’installer : l’installation ne doit plus échouer après correction de la partition.

Pièges fréquents et comment les éviter

  • « wusa /hide » n’existe pas. Utilisez WSUS, WUfB ou PSWindowsUpdate si normalisé.
  • Lettre de lecteur persistante sur la partition WinRE : évitez. Retirez la lettre si elle reste après tests.
  • BitLocker actif pendant le redimensionnement : toujours suspendre, sinon risque d’échec ou de verrouillage.
  • Layout avec Recovery en tête de disque : le script proposé supprime/recrée la partition en fin de disque si nécessaire. Testez d’abord sur un poste pilote.
  • Contrainte d’espace sur C: : si moins de 1,5 Go libres, la réduction échouera. Nettoyez avant (Disk Cleanup, Dism /Online /Cleanup-Image /StartComponentCleanup).
  • Incohérence d’index WIM : validez le bon /Index via DISM /Get-WimInfo avant montage.

FAQ rapide

KB5034441 concerne quelles versions ? Windows 10 21H2/22H2. Si WinRE est absent, l’update n’a rien à patcher — mais vous perdez la récupération avancée et vous restez exposé. Créez la partition.

<dt>Pourquoi 1&nbsp;Go et pas 750&nbsp;Mo&nbsp;?</dt>
<dd>1&nbsp;Go couvre la croissance future de WinRE (drivers, langues, composants) et limite les retours.</dd>

<dt>Puis‑je juste désactiver WinRE&nbsp;?</dt>
<dd>Ce n’est pas recommandé. WinRE est essentiel pour la réparation du démarrage, la réinitialisation et certaines opérations BitLocker. </dd>

<dt>DISM dans l’image suffit‑il&nbsp;?</dt>
<dd>Il <em>pré‑met</em> à jour <em>WinRE.wim</em>, mais la taille de la partition reste un problème de <strong>déploiement</strong>. Traitez les deux aspects.</dd>

Mise en œuvre MDT/WDS : où placer le script ?

  1. Dans MDT, insérez une étape « Run PowerShell Script » après « State Restore » et avant « Windows Update (Post‑Application Installation) ».
  2. Dans WDS natif, attachez le script à la phase PostInstall (appelé depuis unattend.xml via FirstLogonCommands ou un service de provisionnement).
  3. Journalisez vers C:\Windows\Temp\WinRE-Repair.log et remontez les statuts via vos outils (CMTrace/Intune/MDT monitoring).

Annexes : snippets utiles

DiskPart : créer une partition WinRE de 1 Go en fin de disque (UEFI/GPT)

rem > Create-WinRE.txt
select disk 0
select volume C
shrink desired=1200
create partition primary size=1024
format quick fs=ntfs label="WinRE"
assign letter=R
set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
gpt attributes=0x8000000000000001
exit

diskpart /s Create-WinRE.txt

Puis :

mkdir R:\Recovery\WindowsRE
copy C:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
reagentc /disable
reagentc /setreimage /path R:\Recovery\WindowsRE /target C:\Windows
reagentc /enable

PowerShell : test rapide de conformité

function Test-WinRECompliance {
  $re = Get-Partition | Where-Object { $_.GptType -eq '{DE94BBA4-06D1-4D40-A16A-BFD50179D6AC}' -or $_.MbrType -eq '0x27' } | Select-Object -First 1
  $size = if ($re) { [int]($re.Size/1MB) } else { 0 }
  $status = (reagentc /info) | Select-String 'Windows RE status' | ForEach-Object { $_.ToString() }
  [PSCustomObject]@{ WinREPartitionMB = $size; ReStatus = $status }
}
Test-WinRECompliance | Format-List

DISM : intégrer KB5034441 au WinRE du poste

mkdir C:\MountRE
DISM /Mount-Wim /WimFile:"R:\Recovery\WindowsRE\Winre.wim" /Index:1 /MountDir:"C:\MountRE"
DISM /Image:"C:\MountRE" /Add-Package /PackagePath:"C:\OSD\Packs\KB5034441.cab"
DISM /Unmount-Wim /MountDir:"C:\MountRE" /Commit

Bonnes pratiques opérationnelles

  • Standardisez une partition WinRE de 1 Go pour tous les modèles et tailles de disques.
  • Idempotence des scripts : rejouez‑les sans risque sur un poste déjà conforme.
  • Contrôles de santé post‑déploiement : exportez reagentc /info et la taille de WinRE dans vos journaux d’inventaire.
  • ADK/WinPE : tenez‑les à jour pour éviter les incompatibilités DISM/WinPE qui compliquent l’injection de paquets.
  • Migration : préparez le passage à Windows Server 2019/2022, MDT ou Intune Autopilot pour moderniser la chaîne de déploiement.

Conclusion

KB5034441 met en lumière une dette technique classique : une partition WinRE trop petite, héritée d’images anciennes. La correction « one‑shot » consiste à revoir le partitionnement (1 Go pour WinRE) et à automatiser la mise en conformité dans votre pipeline WDS/MDT. En pré‑mettant à jour WinRE.wim et en insérant un script post‑déploiement idempotent, vous éliminez les interventions manuelles, rendez les postes conformes dès J+0 et évitez d’autres blocages lors de futures mises à jour de sécurité. Profitez‑en pour planifier la sortie de Windows Server 2012 et consolider votre socle de déploiement.

Sommaire