WSUS — Erreur « Unexpected end of file » lors d’un import hors ligne sur Windows Server 2022 : causes, correctifs et procédure pas à pas

Votre import hors ligne WSUS se bloque avec « Unexpected end of file » après quelques minutes ? Voici un guide complet pour diagnostiquer, corriger et fiabiliser définitivement vos imports sur Windows Server 2022 (WSUS 10.0.20348).

Sommaire

Problème à résoudre

L’import d’un export WSUS (Windows Server 2022 Datacenter) à l’aide de wsusutil.exe import échoue après ± 10 minutes avec l’erreur :

Fatal error : Unexpected end of file has occurred. The following elements are not closed : metadata, update, updates, ExportPackage.

Plus de la moitié des correctifs sont pourtant déjà présents ; les relances de la commande ne progressent plus.


Analyse des causes probables

PisteExplication rapide
Fichier d’export tronquéL’export .cab ou son catalogue .log/.xml.gz est incomplet (copie interrompue, support FAT32, limite proxy, etc.).
Version ou correctifs WSUSWSUS 10.0.20348 (Server 2022) souffre de bugs d’import corrigés par des mises à jour cumulatives récentes ; un système non à jour peut échouer.
Espace disque ou SQLManque d’espace dans WsusContent ou la base Windows Internal Database / SQL Server provoquant une coupure d’écriture.
Antivirus/EDRAnalyse en temps réel qui verrouille temporairement le .cab ou le dossier WsusContent, générant un flux XML interrompu côté import.
Chemins/nommageChemins trop longs, caractères spéciaux, ou fichiers .cab placés sur un partage avec latence ; l’import lit alors des blocs corrompus.
Corruption mémoire/systèmeErreurs de disque, de RAM, ou pannes transitoires durant l’écriture du flux XML.

Ce que signifie réellement « Unexpected end of file »

Lors d’un import WSUS, wsusutil.exe lit un flux XML (contenu dans le .cab) qui décrit les mises à jour (balises <ExportPackage>, <updates>, <update>, <metadata>, etc.). L’erreur indique que le flux s’est arrêté avant la fermeture de certaines balises : le parseur XML n’a pas reçu la fin du document. Dans plus de 80 % des cas, c’est dû à un export incomplet ou altéré au moment de la copie ou de la lecture.


Diagnostic express (10 minutes)

  1. Vérifier la taille et le hash du fichier exporté côté source et côté cible :
    certutil -hashfile Export2025-09-16.cab SHA256 Les valeurs doivent être strictement identiques.
  2. Tester l’intégrité du .cab :
    mkdir %TEMP%\WSUS_Test expand -f:* Export2025-09-16.cab %TEMP%\WSUS_Test type %TEMP%\WSUS_Test\export.xml | findstr /c:"&lt;/ExportPackage&gt;" Si la balise fermante n’apparaît pas, l’export est probablement tronqué.
  3. Contrôler l’espace disque : vérifier la partition du dossier WsusContent et celle hébergeant la base WID/SQL. Garder une marge confortable (dizaine de Go) pour l’opération.
  4. Désactiver temporairement l’analyse en temps réel sur le répertoire d’import et WsusContent (puis réactiver après).
  5. Relancer l’import depuis le même dossier que les fichiers .cab et .log :
    cd "C:\Program Files\Update Services\Tools" wsusutil.exe import Export2025-09-16.cab Export2025-09-16.log Surveiller C:\Program Files\Update Services\ImportExport.log.

Procédure de remédiation détaillée

1) Recréer un export sain sur le serveur source

Sur le WSUS connecté à Internet :

cd "C:\Program Files\Update Services\Tools"
wsusutil.exe export Export2025-09-16.cab Export2025-09-16.log
certutil -hashfile Export2025-09-16.cab SHA256
  • Comparer le hash au moment de la réception sur le serveur cible pour écarter tout problème de copie.
  • Si l’export est « très » volumineux, réduisez le périmètre côté source (produits, classifications, langues) avant d’exporter. Remarque : wsusutil export n’offre pas de filtres ; pour « segmenter », créez si besoin un serveur WSUS source temporaire avec un périmètre restreint, synchronisez, puis exportez.

2) Transférer le fichier de manière fiable

  • Évitez les supports FAT32 (limite de 4 Go/fichier) ; préférez NTFS ou exFAT.
  • Privilégiez SMB sur un réseau stable, ou une copie vérifiée :
    robocopy \\Source\WSUS\Exports D:\Imports Export2025-09-16.cab Export2025-09-16.log /copyall /dcopy:t /zb /r:1 /w:1 /mt:8 /np /tee /log+:D:\Imports\copy.log /verify
  • Recalculez le SHA‑256 côté cible et comparez.

3) Contrôler le contenu avant import

Décompressez le .cab avec expand ou un outil d’archivage et ouvrez export.xml. Recherchez :

&lt;/ExportPackage&gt;

Si la balise est absente ou que le fichier s’arrête brutalement au milieu d’un bloc <metadata>, recréez l’export ; l’import échouera systématiquement.

4) Mettre à jour le serveur cible

  • Appliquez la dernière mise à jour cumulative Windows Server 2022 et la cumulative .NET appropriée.
  • Redémarrez, puis exécutez un nettoyage WSUS :
    Import-Module UpdateServices $server = Get-WsusServer Invoke-WsusServerCleanup -CleanupObsoleteUpdates -CompressUpdates -CleanupObsoleteComputers -CleanupUnneededContentFiles -DeclineExpiredUpdates -DeclineSupersededUpdates
  • Vérifiez la santé de la base : taille des fichiers, autogrowth, espace libre sur le volume disque.

5) Importer avec la syntaxe exacte depuis le même dossier

cd "C:\Program Files\Update Services\Tools"
wsusutil.exe import Export2025-09-16.cab Export2025-09-16.log

Bonnes pratiques :

  • Placez .cab et .log dans le même dossier local (éviter les partages réseaux durant l’import).
  • Exécutez la commande depuis une Invite de commandes administrateur ou un PowerShell élevé.
  • Surveillez C:\Program Files\Update Services\ImportExport.log.

6) Segmenter des exports très volumineux (optionnel, méthode sûre)

Bien que wsusutil export n’accepte aucun filtre, vous pouvez réduire un export de façon déterministe :

  1. Créer un WSUS source « périmètre réduit » (machine jetable si besoin).
  2. Dans Options → Produits et classifications, ne cocher que les familles nécessaires (p. ex. Windows 10/11) et les classifications indispensables (Sécurité, Mises à jour cumulatives, Définitions).
  3. Synchroniser, nettoyer, puis exporter : l’export sera naturellement plus petit.
  4. Importer ensuite sur la cible hors ligne.

Alternatives pour sites isolés : la réplication WSUS (Upstream/Downstream) sur réseau privé, ou l’usage d’une solution de distribution locale qui évite l’import manuel.

7) Vérifier et provisionner l’espace

  • Prévoir une marge ≥ 20 Go pour WsusContent si l’import introduit beaucoup de métadonnées/contenus.
  • Conserver ≥ 10 % d’espace libre sur le volume qui porte la base WID/SQL et les journaux.
  • Surveiller la file BITS et les transferts si du contenu binaire est téléchargé après l’import.

8) Journalisation et contrôle qualité

Les fichiers et journaux à inspecter :

  • C:\Program Files\Update Services\ImportExport.log (trace de l’import)
  • Journal des événements Application (source : Windows Server Update Services)
  • SoftwareDistribution.log et WSUSCtrl.log (si utilisés par vos outils de supervision)
:: Afficher les 100 dernières lignes d'ImportExport.log
powershell -NoProfile -Command "Get-Content 'C:\Program Files\Update Services\ImportExport.log' -Tail 100 -Wait"

:: Événements récents du rôle WSUS
wevtutil qe Application /q:"*[System[Provider[@Name='Windows Server Update Services']]]" /c:50 /f:text /rd:true

Exemple de signature d’erreur typique dans ImportExport.log :

[Date Heure] Fatal error: Unexpected end of file has occurred.
The following elements are not closed: metadata, update, updates, ExportPackage.
Line XXXX, position YY.

9) Exclusions antivirus recommandées (temporaire)

Pendant l’import, envisager des exclusions temporaires :

  • Dossier d’import (où résident .cab et .log)
  • C:\Program Files\Update Services\
  • Dossier WsusContent configuré

Réactiver ensuite la protection complète.

10) Vérifications SQL/WID utiles

Pour les environnements WID (Windows Internal Database), un contrôle de base peut aider à détecter un manque d’espace ou une croissance bloquée.

:: Exemples - nécessite les outils SQL installés
sqlcmd -S np:\\.\pipe\MICROSOFT##WID\tsql\query -Q "SELECT name, size*8/1024 AS SizeMB FROM sys.database_files;"
sqlcmd -S np:\\.\pipe\MICROSOFT##WID\tsql\query -Q "SELECT COUNT(*) AS Updates FROM SUSDB.dbo.tbUpdate;"

Si la base approche de sa limite ou si le volume est plein, libérez de l’espace, exécutez un nettoyage WSUS, puis réessayez.


Procédure pas à pas consolidée

  1. Sur le WSUS source : appliquer les mises à jour, nettoyer WSUS, exporter, calculer le SHA‑256.
  2. Transférer via SMB ou support NTFS/exFAT fiable (éviter FAT32/VPN instables) et vérifier le SHA‑256 côté cible.
  3. Sur la cible : mettre à jour Windows/.NET, libérer de l’espace, désactiver temporairement l’antivirus sur les chemins WSUS.
  4. Pré‑valider le .cab (expand, balise </ExportPackage>), puis lancer l’import depuis le même dossier.
  5. Surveiller l’ImportExport.log et l’Observateur d’événements ; relire les échecs et corriger selon le motif (espace, corruption, verrouillage).
  6. Si échec persistant : recréer un export neuf ; si l’export reste trop gros, générer un périmètre réduit côté source et réexporter.

Bonnes pratiques pour fiabiliser les imports hors ligne

  • Standardiser le nommage : ExportYYYY-MM-DD.cab + .log assorti.
  • Travailler en local pour l’import (pas depuis un partage réseau).
  • Journaliser la chaîne de transfert : gardez les hashes, journaux robocopy, date/heure, compte opérateur.
  • Éviter les chemins très longs et les caractères accentués dans le chemin d’import.
  • Plan de reprise : conserver le dernier export validé et son hash pour rejouer rapidement en cas d’incident.
  • Nettoyage régulier WSUS pour contenir la taille de la base et du contenu.

Questions fréquentes (FAQ)

Faut‑il absolument le fichier .log avec le .cab ?
Oui. L’import s’appuie sur le couple .cab + .log. L’absence de .log ou un .log décalé par rapport au .cab peut provoquer des incohérences.

Relancer l’import reprend‑il là où il s’est arrêté ?
Pas toujours. En cas de corruption du flux XML, l’import rejouera l’erreur. D’où l’importance de valider l’intégrité avant de réessayer.

Peut‑on filtrer un export WSUS par date ou classification ?
Non via wsusutil export. Pour « segmenter », réduisez le périmètre (produits/classifications/langues) sur un WSUS source dédié, synchronisez, puis exportez. Autre piste : réplication WSUS en réseau privé.

Faut‑il exécuter wsusutil postinstall ?
Inutile pour l’erreur « Unexpected end of file ». postinstall sert à (ré)initialiser WSUS après installation ou déplacement de contenu. Utilisez‑le avec prudence, car il peut modifier la configuration (chemins, IIS).

J’ai validé le hash mais l’import échoue encore
Vérifiez l’antivirus/EDR, l’espace disque, l’état des services WSUS/IIS, les journaux SQL/WID, et testez l’extraction manuelle du .cab. Si la balise de fin est présente, suspectez un autre verrouillage (fichier ou réseau).


Scripts utiles

Contrôle pré‑import automatisé (PowerShell)

# Vérifie hash, extraction et balise de fin
param(
  [Parameter(Mandatory=$true)] [string]$CabPath,
  [string]$Algo = "SHA256"
)

if (!(Test-Path \$CabPath)) { throw "Fichier introuvable: \$CabPath" }
\$hash = (certutil -hashfile \$CabPath \$Algo) -join "`n"
Write-Host "Hash $Algo:`n\$hash"

\$temp = Join-Path \$env\:TEMP ("WSUS\_Export\_Test\_" + \[Guid]::NewGuid())
New-Item -ItemType Directory -Path \$temp | Out-Null

& expand -f:\* \$CabPath \$temp | Out-Null
\$exportXml = Join-Path \$temp "export.xml"
if (!(Test-Path \$exportXml)) { throw "export.xml manquant dans le CAB." }

\$lastLines = Get-Content \$exportXml -Tail 5
if (\$lastLines -notmatch "\") {
throw "Balise de fin \ absente : export corrompu ou tronqué."
}

Write-Host "Contrôle OK. Dossier test: \$temp" 

Lecture guidée des journaux d’import

$log = "C:\Program Files\Update Services\ImportExport.log"
if (Test-Path $log) {
  Get-Content $log -Tail 200 | ForEach-Object { $_ }
} else {
  Write-Warning "ImportExport.log introuvable."
}

Écueils courants et comment les éviter

  • Support USB en FAT32 : scinde ou bloque les gros fichiers ; formatez en NTFS/exFAT.
  • VPN inconstant : provoque des copies partielles ; préférez une navette physique fiable ou un réseau stable.
  • Chemin UNC avec latence : copiez localement avant d’importer.
  • Antivirus agressif : mettez des exclusions temporaires ciblées pendant l’import.
  • Volume disque saturé : surveillez en temps réel la consommation de WsusContent et de la base.

Alternatives et stratégies complémentaires

  • Si vous administrez principalement des postes Windows 10/11 : envisagez des modèles Windows Update for Business et Delivery Optimization pour réduire la dépendance aux imports manuels.
  • Pour sites isolés : infrastructures de réplication WSUS ou gestionnaires de correctifs avec points de distribution déconnectés.
  • Ouvrir un ticket sur le forum Q&A spécialisé WSUS peut aider pour des cas limites (sans partager de données sensibles).

Checklist opérationnelle

  • ✅ Export recréé récemment sur WSUS source
  • ✅ Hash vérifié source ↔ cible
  • export.xml contient </ExportPackage>
  • ✅ Serveur cible à jour (Windows + .NET)
  • ✅ Espace libre suffisant (contenu + base)
  • ✅ Exclusions AV temporaires appliquées
  • ✅ Import lancé localement depuis le dossier des fichiers
  • ✅ Journaux contrôlés et archivés

Informations complémentaires utiles

  • Un export corrompu est la cause la plus fréquente de l’erreur « Unexpected end of file ».
  • Les mises à jour cumulatives récentes de Windows Server 2022 et de .NET améliorent la fiabilité du rôle WSUS et des opérations d’import/export ; gardez vos serveurs à jour.
  • Si vous gérez surtout Windows 10/11, envisagez des stratégies qui évitent l’import manuel lorsque c’est possible.
  • Pour des environnements isolés, des solutions dédiées à l’offline patching et la réplication interne sont souvent plus robustes qu’un transfert ad‑hoc de CAB géants.

Résumé express

L’erreur provient presque toujours d’un export incomplet ou corrompu. Recréez l’export, copiez‑le de façon sûre, mettez à jour le serveur, puis réimportez depuis le même dossier. Contrôlez systématiquement les hashes, la présence de </ExportPackage> et les journaux. En cas de blocage persistant, réduisez le périmètre de l’export (WSUS source dédié), ou ouvrez un ticket dans un canal de support spécialisé.


Annexe : commandes de référence

ObjectifCommande
Exporter WSUSwsusutil.exe export Export2025-09-16.cab Export2025-09-16.log
Importer WSUSwsusutil.exe import Export2025-09-16.cab Export2025-09-16.log
Hash du CABcertutil -hashfile Export2025-09-16.cab SHA256
Tester extractionexpand -f:* Export2025-09-16.cab %TEMP%\WSUS_Test
Chercher la balise de fintype %TEMP%\WSUS_Test\export.xml | findstr /c:"</ExportPackage>"
Suivre le log en directpowershell -NoProfile -Command "Get-Content 'C:\Program Files\Update Services\ImportExport.log' -Tail 100 -Wait"
Nettoyage WSUSInvoke-WsusServerCleanup -CompressUpdates -DeclineExpiredUpdates -DeclineSupersededUpdates -CleanupUnneededContentFiles -CleanupObsoleteComputers -CleanupObsoleteUpdates
Événements WSUSwevtutil qe Application /q:"*[System[Provider[@Name='Windows Server Update Services']]]" /c:50 /f:text /rd:true

En appliquant cette démarche de bout en bout (intégrité de l’export, transfert fiable, système à jour, import local et supervision des journaux), vous éliminez la quasi‑totalité des causes de l’erreur « Unexpected end of file » et fiabilisez vos opérations WSUS hors ligne.

Sommaire