Erreur 0x800f081f DISM sur Windows Server 2019 : diagnostic et correctifs fiables

Sur Windows Server 2019 (build 17763), DISM /Online /Cleanup-Image /RestoreHealth peut échouer avec 0x800f081f (CBS_E_SOURCE_MISSING). Voici un guide concret et exhaustif pour diagnostiquer, réparer le magasin de composants et relancer Windows Update en toute sécurité.

Sommaire

Symptômes et contexte

Vous exécutez sur un serveur Windows Server 2019 Standard (build 17763) la commande :

DISM /Online /Cleanup-Image /RestoreHealth

La commande retourne 0x800f081f et l’installation des mises à jour échoue. Dans les journaux, on observe des erreurs liées à CBS (Component-Based Servicing) indiquant que la source de réparation n’a pas été trouvée.

Comprendre le code 0x800f081f

0x800f081f correspond à CBS_E_SOURCE_MISSING : DISM ne parvient pas à localiser les fichiers nécessaires pour réparer des composants Windows corrompus. La cause la plus fréquente est une archive WinSxS locale incomplète ou endommagée, ou une source de réparation introuvable (ISO/WIM non monté, partage non accessible, stratégie WSUS restrictive…).

Feuille de route express

ÉtapeAction détailléeRemarques importantes
1. Comprendre le code0x800f081f = CBS_E_SOURCE_MISSING : DISM ne trouve pas les fichiers nécessaires pour réparer les composants corrompus.L’archive WinSxS locale est incomplète ou endommagée.
2. Obtenir une source saineIdentifier une machine strictement de même édition, build et niveau de correctifs. Partager en lecture seule son dossier C:\Windows\WinSxS ou monter l’ISO correspondant.Un partage réseau évite de dupliquer >10 Go sur le serveur défectueux.
3. Relancer DISM avec source expliciteAvec un partage WinSxS : Dism /Online /Cleanup-Image /RestoreHealth ^ /Source:"\\ServeurSain\Partage\WinSxS" ^ /LimitAccess Avec un ISO (WIM) monté en X: : Dism /Online /Cleanup-Image /RestoreHealth ^ /Source:"WIM:X:\sources\install.wim:1" ^ /LimitAccess/LimitAccess empêche l’interrogation de Windows Update et force l’usage de la source fournie.
4. Vérifier & finaliserExécuter sfc /scannow, redémarrer, puis relancer Windows Update.sfc doit afficher : « La protection des ressources Windows n’a détecté aucune violation d’intégrité ».

Procédure détaillée et bonnes pratiques

Pré‑requis

  • Session PowerShell/Invite de commandes en tant qu’administrateur.
  • Espace disque libre suffisant (idéalement > 15 Go sur un volume de travail).
  • Accès réseau au partage de source (si utilisé). Si vous exécutez des tâches planifiées sous SYSTEM, assurez-vous que le compte a accès au partage.
  • Créer un dossier de travail pour les journaux et le répertoire de scratch : New-Item -ItemType Directory -Path "C:\Logs" -ErrorAction SilentlyContinue | Out-Null New-Item -ItemType Directory -Path "D:\Scratch" -ErrorAction SilentlyContinue | Out-Null

Identifier précisément l’édition et le niveau

Avant toute action, relevez l’édition, le build et le niveau de correctifs afin de choisir une source strictement compatible.

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

Sur Windows Server 2019, la version de base est 10.0.17763.x. L’idéal est d’utiliser une source correspondant à la même édition (Standard/Datacenter), même build et même LCU.

Méthode A — Utiliser le WinSxS d’une machine saine

  1. Sur un serveur sain strictement identique : partager C:\Windows\WinSxS en lecture seule (droits pour le compte administrateur qui opérera la réparation).
  2. Sur le serveur à réparer : exécuter DISM en pointant sur ce partage et en consignant un journal explicite : Dism /Online /Cleanup-Image /RestoreHealth ^ /Source:"\\ServeurSain\Partage\WinSxS" ^ /LimitAccess ^ /ScratchDir:"D:\Scratch" ^ /LogPath:"C:\Logs\Dism_RestoreHealth.log"
  3. Patientez jusqu’au message de réussite (« L’opération a réussi ») puis passez à Vérifier & finaliser.

Astuce copie contrôlée : si vous préférez copier localement, utilisez Robocopy pour préserver l’intégrité (ACL, horodatages) — volume requis > 10 Go :

robocopy "\\ServeurSain\Partage\WinSxS" "D:\Depot\WinSxS" /MIR /COPY:DAT /DCOPY:DAT /R:0 /W:0

Méthode B — Utiliser un ISO d’installation (WIM/ESD)

  1. Monter l’ISO correspondant à la même build (ex. Windows Server 2019 updated 2024-09) : Mount-DiskImage -ImagePath "D:\ISO\WS2019.iso" Notez la lettre de lecteur attribuée (ici X:).
  2. Identifier l’index correspondant à l’édition voulue : dism /Get-WimInfo /WimFile:X:\sources\install.wim Repérez la ligne Nom (ex. Windows Server 2019 Standard) et son Index.
  3. Exécuter la réparation avec la source explicite : Dism /Online /Cleanup-Image /RestoreHealth ^ /Source:"WIM:X:\sources\install.wim:<Index>" ^ /LimitAccess ^ /ScratchDir:"D:\Scratch" ^ /LogPath:"C:\Logs\Dism_FromWIM.log"

ISO avec install.esd : si l’ISO contient install.esd plutôt que install.wim :

dism /Get-WimInfo /WimFile:X:\sources\install.esd
Dism /Online /Cleanup-Image /RestoreHealth ^
 /Source:"ESD:X:\sources\install.esd:&lt;Index&gt;" ^
 /LimitAccess

Méthode C — Définir une « Source de réparation » via stratégie

Dans certains environnements d’entreprise avec WSUS, Windows Update est bloqué et DISM n’a aucune source. Définissez une source durable par GPO :

  • Ouvrez Stratégie de groupe (locale ou domaine).
  • Allez dans Configuration ordinateur > Modèles d’administration > Système.
  • Activez Spécifier les paramètres d’installation de composants facultatifs et de réparation des composants.
  • Renseignez un chemin réseau (ex. \\ServeurDepot\WinSxS) et cochez Ne jamais tenter de télécharger les sources de réparation à partir de Windows Update.

Après application de la GPO (gpupdate /force), relancez DISM sans /Source : la stratégie fournira la source.

Vérifier & finaliser

  1. Analyse de l’intégrité système : sfc /scannow Message attendu : « La protection des ressources Windows n’a détecté aucune violation d’intégrité ».
  2. Redémarrer le serveur.
  3. Ré‑appliquer les mises à jour (via Windows Update/WSUS) et vérifier l’historique.

Alternatives et compléments utiles

Utiliser un support d’installation ISO

Si vous ne disposez pas d’une machine saine, l’ISO correspondant est une source fiable, à condition de sélectionner le bon index (édition) :

Dism /Online /Cleanup-Image /RestoreHealth ^
 /Source:"WIM:X:\sources\install.wim:1" ^
 /LimitAccess

Adaptez :1 à l’édition (Standard/Datacenter) trouvée via /Get-WimInfo.

Réinitialiser le magasin Windows Update (en cas d’échec persistant)

net stop wuauserv
net stop bits
net stop cryptsvc
ren "C:\Windows\SoftwareDistribution" "SoftwareDistribution.bak"
ren "C:\Windows\System32\catroot2" "catroot2.bak"
net start cryptsvc
net start bits
net start wuauserv

Prévenir la récidive

  • Vérifier l’intégrité des disques : chkdsk /scan (en ligne) ou planifier chkdsk /f si nécessaire.
  • Surveiller l’espace libre : le magasin WinSxS se nettoie en toute sécurité avec : Dism /Online /Cleanup-Image /StartComponentCleanup Attention à /ResetBase (supprime la possibilité de désinstaller des mises à jour).
  • Standardiser une source de réparation centralisée en lecture seule (partage réseau) et l’appliquer par GPO.

Journalisation et diagnostic approfondi

Activez des journaux dédiés pour accélérer l’analyse :

Dism /Online /Cleanup-Image /ScanHealth ^
 /ScratchDir:"D:\Scratch" ^
 /LogPath:"C:\Logs\Dism_ScanHealth.log"

Dism /Online /Cleanup-Image /RestoreHealth ^
/Source:"WIM:X:\sources\install.wim:<Index>" ^
/LimitAccess ^
/ScratchDir:"D:\Scratch" ^
/LogPath:"C:\Logs\Dism_RestoreHealth.log" </code></pre>

<p>Fichiers utiles&nbsp;:</p>
<ul>
  <li><code>C:\Windows\Logs\DISM\dism.log</code></li>
  <li><code>C:\Windows\Logs\CBS\CBS.log</code> (recherchez <code>CBS_E_SOURCE_MISSING</code> / <code>[SR]</code>)</li>
</ul>
<p>Extraire les entrées <code>sfc</code> pour revue&nbsp;:</p>
<pre><code>findstr /c:"[SR]" "%windir%\Logs\CBS\CBS.log" &gt; "%userprofile%\Desktop\sfcdetails.txt"
</code></pre>

<h2>Erreurs associées et pièges courants</h2>
<table>
  <thead>
    <tr>
      <th>Code/Message</th>
      <th>Cause probable</th>
      <th>Correctif recommandé</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>0x800f081f</code> (<em>CBS_E_SOURCE_MISSING</em>)</td>
      <td>Source de réparation introuvable ou incompatible.</td>
      <td>Fournir une <strong>source exacte</strong> (WinSxS identique, ISO/WIM même édition/build), utiliser <code>/LimitAccess</code>.</td>
    </tr>
    <tr>
      <td><code>0x800f0831</code></td>
      <td>Magasin de composants corrompu / manifeste manquant.</td>
      <td>Réparer via source WIM/ESD, puis <code>sfc /scannow</code>. Vérifier <code>CBS.log</code>.</td>
    </tr>
    <tr>
      <td><code>0x800f0906</code></td>
      <td>Téléchargement des sources impossible (WU/WSUS bloqué).</td>
      <td>Définir une source GPO, ou utiliser un ISO local + <code>/LimitAccess</code>.</td>
    </tr>
    <tr>
      <td><code>0x800f0922</code></td>
      <td>Échec d’un installateur pendant la maintenance.</td>
      <td>Nettoyage des composants (<code>/StartComponentCleanup</code>), réinitialisation WU, puis <code>RestoreHealth</code>.</td>
    </tr>
    <tr>
      <td>Accès au partage refusé</td>
      <td>Compte/service sans droits sur le partage UNC.</td>
      <td>Exécuter en session admin avec accès réseau, ou stocker des identifiants&nbsp;:
        <pre><code>cmdkey /add:ServeurSain /user:DOMAINE\Compte /pass:MotDePasse
  </td>
</tr>
<tr>
  <td>Manque d’espace</td>
  <td>DISM a besoin d’un dossier temporaire volumineux.</td>
  <td>Utiliser /ScratchDir vers un volume disposant de &gt;15&nbsp;Go.</td>
</tr>

Quand pointer vers sources\sxs plutôt que install.wim ?

Le dossier \sources\sxs d’un ISO sert surtout à l’installation de Features on Demand telles que .NET Framework 3.5. Pour la réparation du magasin de composants, préférez install.wim/install.esd ou un WinSxS strictement identique.

Script PowerShell d’automatisation (optionnel)

Le script ci‑dessous : détecte l’édition, choisit automatiquement l’index correct dans le WIM/ESD, force l’utilisation de la source, trace les opérations et bascule sur un dépôt WinSxS réseau en secours.

$ErrorActionPreference = "Stop"

# --- Paramètres à adapter ---

$IsoDrive      = "X:"                                    # Lettre du lecteur ISO monté
$WimPath       = Join-Path $IsoDrive "sources\install.wim"
$EsdPath       = Join-Path $IsoDrive "sources\install.esd"
$FallbackWxs   = "\ServeurDepot\WinSxS"                 # Dépôt WinSxS RO
$ScratchDir    = "D:\Scratch"
$LogDir        = "C:\Logs"
$DismLog       = Join-Path $LogDir "Dism_AutoFix.log"

New-Item -ItemType Directory -Path $ScratchDir -ErrorAction SilentlyContinue | Out-Null
New-Item -ItemType Directory -Path $LogDir    -ErrorAction SilentlyContinue | Out-Null

# --- Récupération de l’édition locale ---

$os      = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$edition = $os.EditionID         # ex. "ServerStandard"
$build   = $os.CurrentBuild      # ex. "17763"
Write-Host "Édition locale : $edition — Build : $build"

# --- Fonction utilitaire : récupère l’index du WIM/ESD correspondant à l’édition ---

function Get-ImageIndex {
param([string]$ImageFile, [string]$EditionMatch)
$info = cmd /c "dism /Get-WimInfo /WimFile:`"$ImageFile`""
$blocks = ($info | Out-String) -split "Index :"
foreach ($b in $blocks) {
if ($b -match "Index :\s*(\d+)") {
$idx = [int]$matches[1]
if ($b -match "Edition :\s*(\S+)") {
$ed = $matches[1]
if ($ed -like "*$EditionMatch*") { return $idx }
}
}
}
return $null
}

# --- Choix de la meilleure source ---

$src = $null
if (Test-Path $WimPath) {
$idx = Get-ImageIndex -ImageFile $WimPath -EditionMatch $edition
if ($idx) { $src = "WIM:$WimPath:$idx" }
} elseif (Test-Path $EsdPath) {
$idx = Get-ImageIndex -ImageFile $EsdPath -EditionMatch $edition
if ($idx) { $src = "ESD:$EsdPath:$idx" }
}

if (-not $src -and (Test-Path $FallbackWxs)) {
$src = $FallbackWxs
}

if (-not $src) {
throw "Aucune source valide trouvée (WIM/ESD ou WinSxS). Montez l’ISO correct ou corrigez le chemin du dépôt."
}

Write-Host "Source retenue : $src"

# --- Exécution DISM ---

if ($src -like "WIM:*" -or $src -like "ESD:*") {
Start-Process -FilePath dism.exe -Wait -NoNewWindow -ArgumentList @(
"/Online","/Cleanup-Image","/RestoreHealth",
"/Source:`"$src`"","/LimitAccess",
"/ScratchDir:`"$ScratchDir`"","/LogPath:`"$DismLog`""
)
} else {
Start-Process -FilePath dism.exe -Wait -NoNewWindow -ArgumentList @(
"/Online","/Cleanup-Image","/RestoreHealth",
"/Source:`"$src`"","/LimitAccess",
"/ScratchDir:`"$ScratchDir`"","/LogPath:`"$DismLog`""
)
}

# --- Vérification SFC ---

Start-Process -FilePath sfc.exe -ArgumentList "/scannow" -Wait -NoNewWindow
Write-Host "Terminé. Consultez les journaux : $DismLog et C:\Windows\Logs\CBS\CBS.log" 

Scénarios spéciaux

  • Contrôleur de domaine : planifiez un créneau de maintenance, vérifiez la réplication AD avant/après, et assurez-vous que le serveur n’est pas en état USN rollback suite à un redémarrage forcé.
  • Serveur de fichiers très chargé : spécifiez /ScratchDir sur un volume rapide et lancez hors pics d’activité.
  • Serveur déployé par image custom : certains systèmes de capture suppriment des composants. Standardisez vos images de référence et conservez une ISO « golden » synchronisée avec votre niveau de correctifs.

Checklist « exécutable »

  • ✅ Confirmer édition & build (17763) et l’espace libre.
  • ✅ Choisir une source strictement compatible (WinSxS identique, ISO/WIM/ESD du même niveau).
  • ✅ Lancer DISM /RestoreHealth avec /LimitAccess et journal dédié.
  • ✅ Exécuter sfc /scannow puis redémarrer.
  • ✅ Ré‑appliquer les mises à jour et surveiller CBS.log / dism.log.

FAQ rapide

Puis-je utiliser un ISO d’une autre édition ?
Non. L’édition (Standard/Datacenter), la langue et la build doivent concorder. À défaut, la réparation échouera ou laissera des incohérences.

Dois-je absolument faire correspondre la mise à jour cumulative (LCU) ?
La correspondance stricte est le plus sûr. Quelques écarts proches peuvent fonctionner, mais en environnement serveur, visez l’identique pour éviter les surprises.

Le nettoyage /StartComponentCleanup suffit‑il ?
Il réduit la taille et enlève les composants supersédés, mais ne remplace pas une réparation quand des manifestes sont manquants.

Résumé opératoire

Sur Windows Server 2019, 0x800f081f signale une source de réparation manquante. Fournissez une source saine (WinSxS identique ou ISO/WIM avec l’index correct), forcez son utilisation avec /LimitAccess, vérifiez avec sfc, redémarrez et réappliquez les correctifs. En environnement géré, pérennisez la source via GPO et automatisez le contrôle de santé avec un script.


Annexe : procédures complémentaires rapides

Réinitialiser le magasin Windows Update (version compacte)

net stop wuauserv &amp; net stop bits &amp; net stop cryptsvc
ren "%SystemRoot%\SoftwareDistribution" "SoftwareDistribution.bak"
ren "%SystemRoot%\System32\catroot2" "catroot2.bak"
net start cryptsvc &amp; net start bits &amp; net start wuauserv

Nettoyage du magasin de composants

Dism /Online /Cleanup-Image /StartComponentCleanup /LogPath:"C:\Logs\Dism_Cleanup.log"

Montage automatisé de l’ISO et réparation en une ligne

PowerShell -NoProfile -Command ^
 "Mount-DiskImage -ImagePath 'D:\ISO\WS2019.iso'; ^
  $vol=(Get-DiskImage 'D:\ISO\WS2019.iso' | Get-Volume).DriveLetter + ':'; ^
  dism /Get-WimInfo /WimFile:$vol'\sources\install.wim'; ^
  dism /Online /Cleanup-Image /RestoreHealth /Source:'WIM:'+$vol+'\sources\install.wim:1' /LimitAccess"

Basculer automatiquement sur un dépôt WinSxS réseau

Dism /Online /Cleanup-Image /RestoreHealth ^
 /Source:"\\ServeurDepot\WinSxS" ^
 /LimitAccess ^
 /LogPath:"C:\Logs\Dism_FromShare.log"

Conclusion

Avec les méthodes ci‑dessus, le message 0x800f081f disparaît et le cycle de patching reprend normalement. La clé est toujours la même : fournir une source fiable, compatible et accessible, puis verrouiller ce standard (GPO/dépôt central) pour éviter toute rechute.

Sommaire