Vous devez récupérer manuellement la mise à jour cumulative KB5042349 (.NET 3.5/4.8/4.8.1) pour Windows Server 2022 ? Ce guide explique pourquoi le fichier s’appelle « windows10.0‑kb… » et détaille une méthode sûre, vérifiable et automatisable pour le télécharger et l’installer.
Contexte et objectif
Un administrateur souhaite installer hors ligne la mise à jour 2024‑08 Cumulative Update for .NET Framework 3.5, 4.8 et 4.8.1 (KB5042349) sur un serveur Windows Server 2022 (version 21H2, x64). En ouvrant le Microsoft Update Catalog, le bouton Download renvoie pourtant vers un fichier dont le nom commence par windows10.0‑kb…
. À première vue, cela peut faire croire qu’il s’agit d’un package réservé à Windows 10. Ce n’est pas le cas : le comportement est attendu. Ce guide clarifie le pourquoi, puis propose un pas‑à‑pas complet (avec vérifications, automatisation et dépannage) pour un déploiement fiable en production.
Pourquoi le préfixe « windows10.0‑kb… » apparaît pour Windows Server 2022
Windows Server 2022 est une édition LTSC bâtie sur la même base technique que la famille Windows 10 (noyau 10.0). Microsoft regroupe de longue date le packaging des correctifs serveur et client quand ils partagent la même branche de développement. Le préfixe windows10.0‑kb
désigne donc la version du noyau (10.0) et non l’édition Windows 10 « client » au sens marketing. En d’autres termes : un nom de fichier qui commence par windows10.0‑kb
peut parfaitement cibler Windows Server 2022.
Élément | Explication |
---|---|
Nomenclature du fichier | Le préfixe windows10.0‑kb reflète la version du noyau (10.0) partagée par Windows 10 et Windows Server 2022. |
Branche de développement | Server 2022 et Windows 10 21H2 sont issus d’une co‑release ; Microsoft réutilise donc des identifiants de packaging communs. |
Conséquence pratique | Un binaire nommé windows10.0‑kbXXXXX‑x64‑…msu peut être parfaitement valable pour Windows Server 2022. |
Ce qu’il faut retenir en une minute
- Comportement attendu : voir
windows10.0‑kb…
pour Server 2022 est normal, car l’OS s’appuie sur le noyau 10.0. - Lien de téléchargement correct : utilisez celui affiché dans le Microsoft Update Catalog pour KB5042349 ; il s’installe bien sur Windows Server 2022.
- Étapes express : téléchargez le(s)
.msu
proposés (par ex.windows10.0‑kb5041948‑x64‑ndp48…msu
ouwindows10.0‑kb5041964‑x64‑ndp481…msu
), copiez‑les sur le serveur, puis exécutezwusa.exe <fichier.msu> /quiet /norestart
et redémarrez si nécessaire.
Identifier le bon package pour votre serveur
La cumulative KB5042349 sert d’« enveloppe » : elle regroupe plusieurs payloads spécifiques aux versions de .NET Framework présentes sur le système. En pratique, le Catalog propose généralement un binaire .msu
pour .NET 4.8 et un autre pour .NET 4.8.1 (sans oublier le support de .NET 3.5 si le rôle/feature est installé).
Composant cible | KB du payload | Nom de fichier typique | Quand l’utiliser |
---|---|---|---|
.NET Framework 4.8 | KB5041948 (contenu de KB5042349) | windows10.0‑kb5041948‑x64‑ndp48…msu | Si votre serveur est resté en 4.8 (cas le plus courant sur Server 2022). |
.NET Framework 4.8.1 | KB5041964 (contenu de KB5042349) | windows10.0‑kb5041964‑x64‑ndp481…msu | Si vous avez ajouté/standardisé .NET 4.8.1 sur vos serveurs. |
.NET Framework 3.5 | Inclus dans la cumulative si la feature est installée | Géré via le même .msu | Si la Feature .NET 3.5 est activée (serveurs applicatifs legacy). |
Astuce pour choisir automatiquement le bon fichier : détectez la version .NET avant installation.
$release = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -ErrorAction Stop).Release
$target = if ($release -ge 533320) { 'ndp481' } else { 'ndp48' }
"Version détectée : $((if ($target -eq 'ndp481') {'.NET 4.8.1'} else {'.NET 4.8'})) — utilisez le package correspondant."
Télécharger proprement depuis le Microsoft Update Catalog
- Recherchez KB5042349 dans le Microsoft Update Catalog.
- Dans la liste, identifiez l’entrée Windows Server 2022, x64‑based Systems et cliquez sur Download.
- Téléchargez le(s) fichier(s) proposé(s) : selon votre parc, il s’agit typiquement de
windows10.0‑kb5041948‑x64‑ndp48…msu
et/ouwindows10.0‑kb5041964‑x64‑ndp481…msu
. - Copiez le(s) fichier(s) sur le serveur cible (share SMB sécurisé, par ex.
\\filesrv\updates\KB5042349
).
Vérifier l’intégrité et la signature avant déploiement
Deux contrôles simples évitent les mauvaises surprises :
- Empreinte SHA‑256 : comparez le hash calculé localement avec celui affiché dans le Catalog.
Get-FileHash .\windows10.0-kb5041964-x64-ndp481.msu -Algorithm SHA256
- Signature Authenticode : vérifiez qu’elle est valide et signée par « Microsoft Corporation ».
$sig = Get-AuthenticodeSignature .\windows10.0-kb5041964-x64-ndp481.msu
$sig | Format-List Status,SignerCertificate
Installer silencieusement avec WUSA
Pour un poste unique ou un petit volume, wusa.exe
reste le moyen le plus simple. L’option /quiet
évite l’UI ; /norestart
laisse au plan de maintenance le soin du redémarrage.
wusa.exe .\windows10.0-kb5041948-x64-ndp48.msu /quiet /norestart
Si plusieurs fichiers sont fournis (ex. 4.8 et 4.8.1), installez uniquement celui qui correspond à votre version .NET. Dans un script, déterminez d’abord la cible (ndp48
vs ndp481
), puis lancez wusa.exe
sur le bon .msu
.
Alternative avancée avec DISM (en cas de contrainte particulière)
DISM travaille nativement avec des .cab
. Vous pouvez extraire le .cab
depuis le .msu
puis l’injecter, utile pour des scénarios d’image hors ligne ou des environnements très verrouillés.
New-Item -ItemType Directory -Path .\KB5042349 -Force | Out-Null
expand -F:* .\windows10.0-kb5041964-x64-ndp481.msu .\KB5042349
dism /online /add-package /packagepath:".\KB5042349\*.cab" /quiet /norestart
Comprendre et gérer les codes de sortie
Code | Signification | Action recommandée |
---|---|---|
0 | Installation réussie | Programmer un redémarrage si demandé par la politique de change. |
3010 | Succès, redémarrage requis | Planifier/forcer un redémarrage dans la fenêtre de maintenance. |
2359302 | Déjà installé / Non applicable | Vérifier la version .NET et l’historique des mises à jour. |
0x800f0818 / 0x80240017 | Package non applicable / erreur générique | Confirmer la cible (.NET 4.8 vs 4.8.1), vérifier prérequis et SSU. |
Vérifications post‑installation
Après l’installation, effectuez ces contrôles :
- Présence de l’update via la pile CBS/Packages :
Get-WindowsPackage -Online |
Where-Object { $_.PackageName -match 'KB504(1948|1964|2349)' } |
Select-Object PackageName, State, InstallTime
- QFE/Hotfix (utile mais pas toujours exhaustif pour .NET) :
Get-HotFix | Where-Object { $_.HotFixID -match 'KB5042349|KB5041948|KB5041964' }
- Registre .NET pour connaître la lignée (4.8 vs 4.8.1) :
$r = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full').Release
if ($r -ge 533320) { 'Le serveur est en .NET Framework 4.8.1' } else { 'Le serveur est en .NET Framework 4.8' }
Note : l’installation d’un Quality Update .NET ne change pas la valeur « Release » (qui identifie la branche 4.8 vs 4.8.1), mais vous y gagnez les correctifs de sécurité et qualité du mois.
Pré‑requis et bonnes pratiques
- Servicing Stack Update (SSU) : sur Server 2022, la SSU est généralement fusionnée à la LCU mensuelle, mais vérifiez que le serveur a reçu les dernières mises à jour de maintenance avant d’appliquer une cumulative .NET, faute de quoi l’installation peut échouer silencieusement.
- Espace disque : prévoyez une marge (typiquement > 2 Go libres sur
%SystemDrive%
) pour l’extraction et le cache de la pile CBS. - Redémarrage coordonné : planifiez le reboot pour éviter des incohérences d’applications dépendantes de .NET.
- Fenêtre de maintenance : verrouillez une plage et désactivez les jobs batch sensibles pendant l’installation.
Déploiement sur plusieurs serveurs
Le bloc suivant illustre un déploiement silencieux et idempotent à partir d’un dossier réseau contenant les deux variantes ndp48
et ndp481
. Il détecte la version .NET, choisit le bon .msu
, installe, logue le résultat et propose le redémarrage différé.
param(
[Parameter(Mandatory)]
[string]$SharePath, # ex: \\filesrv\updates\KB5042349
[string[]]$Servers = @($env:COMPUTERNAME),
[switch]$AutoReboot
)
function Get-DotNetBranch {
try {
$r = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -ErrorAction Stop).Release
return $(if ($r -ge 533320) { 'ndp481' } else { 'ndp48' })
} catch { return 'ndp48' }
}
function Install-KB {
param([string]$MsuPath)
Write-Host "Installation de $MsuPath..."
& wusa.exe $MsuPath /quiet /norestart
$code = $LASTEXITCODE
switch ($code) {
0 { 'Succès' }
3010 { 'Succès avec redémarrage requis' }
2359302 { 'Déjà installé / Non applicable' }
default { "Code de sortie inattendu: $code" }
}
}
$results = @()
$script = {
param($SharePath,$AutoReboot)
$branch = Get-DotNetBranch
$file = Get-ChildItem -Path $SharePath -Filter "*$branch*.msu" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
if (-not $file) { return [pscustomobject]@{ Computer=$env:COMPUTERNAME; Result='Aucun .msu correspondant'; RebootNeeded=$false } }
$res = Install-KB -MsuPath $file.FullName
$reboot = $res -like '*redémarrage requis*'
if ($reboot -and $AutoReboot) { Restart-Computer -Force }
[pscustomobject]@{ Computer=$env:COMPUTERNAME; File=$file.Name; Result=$res; RebootNeeded=$reboot }
}
foreach ($s in $Servers) {
try {
if ($s -eq $env:COMPUTERNAME) { $results += & $script $SharePath $AutoReboot }
else {
$results += Invoke-Command -ComputerName $s -ScriptBlock $script -ArgumentList $SharePath,$AutoReboot -ErrorAction Stop
}
} catch {
$results += [pscustomobject]@{ Computer=$s; Result="Erreur: $($_.Exception.Message)"; RebootNeeded=$false }
}
}
$results | Format-Table -AutoSize
Validation de conformité et audit
Pour prouver l’application de l’update sur l’ensemble du parc, générez un rapport de conformité à partir d’Inventaire/CMDB ou directement via PowerShell :
$servers = Get-Content .\serveurs.txt
$report = foreach ($s in $servers) {
try {
Invoke-Command -ComputerName $s -ScriptBlock {
$pkgs = (Get-WindowsPackage -Online | ? {$_.PackageName -match 'KB504(1948|1964)'}).PackageName -join ';'
[pscustomobject]@{
Computer=$env:COMPUTERNAME
InstalledKBs=$pkgs
DotNetBranch=(Get-DotNetBranch)
}
}
} catch {
[pscustomobject]@{ Computer=$s; InstalledKBs='ERROR'; DotNetBranch='UNKNOWN' }
}
}
$report | Export-Csv .\KB5042349_Conformite.csv -NoTypeInformation -Encoding UTF8
Dépannage : problèmes courants et solutions
Symptôme | Cause probable | Correctif |
---|---|---|
Message « Le package n’est pas applicable à ce système » (0x800f0818) | Vous tentez d’installer le binaire ndp481 alors que le serveur est en 4.8, ou inversement. | Détectez la branche .NET (script fourni) et appliquez le .msu correspondant (KB5041948 pour 4.8, KB5041964 pour 4.8.1). |
Blocage ou durée anormale | Autre session Windows Update en cours / pile CBS occupée (0x800f0902) | Attendez la fin, ou redémarrez le serveur puis relancez le .msu en silencieux. |
Échec silencieux en /quiet | Prérequis manquants, stockage saturé, antivirus interférant | Relancez sans /quiet pour voir l’UI, vérifiez l’espace disque et la signature, neutralisez temporairement l’AV si politique autorisée. |
Applications .NET instables après installation | Redémarrage non effectué / verrous de fichiers | Planifiez un reboot. Si besoin, désinstallez le package concerné : wusa /uninstall /kb:5041948 /quiet /norestart (si désinstallation autorisée). |
Bonnes pratiques de production
- Validation hors production : testez KB5042349 sur un environnement de pré‑prod représentatif (mêmes runtimes, même GPO, même antivirus).
- Fenêtre de maintenance : communiquez en amont, définissez un point de retour (snapshot/backup) et un plan de redémarrage contrôlé.
- Supervision : surveillez les journaux applicatifs et
Windows Logs > Setup
(Event Viewer) dans les 24‑48 h suivant le patch. - Vérification post‑déploiement : industrialisez les checks (scripts, tableau de bord) et consignez les résultats dans votre outil d’ITSM.
FAQ
Le fichier commence par « windows10.0‑kb ». Est‑ce réellement pour Server 2022 ?
Oui. La chaîne « windows10.0 » désigne la version du noyau. Server 2022 utilise le noyau 10.0 ; le binaire est donc applicable.
Dois‑je installer les deux packages 4.8 et 4.8.1 ?
Non. Installez un seul package correspondant à la branche .NET présente sur le serveur. Installez ndp48
ou ndp481
, pas les deux.
Comment savoir si un redémarrage est requis ?
Le code de sortie 3010
indique un reboot requis. Vous pouvez aussi détecter un redémarrage en attente via le registre (RebootPending
) ou la présence de fichiers en attente (PendingFileRenameOperations
).
Que faire si l’installation échoue sans message en mode silencieux ?
Relancez sans /quiet
pour afficher l’UI, examinez %windir%\Logs\CBS\CBS.log
, confirmez l’espace disque et la signature, puis validez la correspondance du package (.NET 4.8 vs 4.8.1).
Procédure pas‑à‑pas récapitulative
- Identifier la branche .NET : 4.8 ou 4.8.1 (script de détection fourni).
- Télécharger depuis le Microsoft Update Catalog la cumulative KB5042349 et le binaire
.msu
correspondant (ndp48
oundp481
). - Vérifier la signature et l’empreinte SHA‑256.
- Installer avec
wusa.exe <fichier.msu> /quiet /norestart
. - Redémarrer pendant la fenêtre de maintenance si
3010
ou si vos politiques l’exigent. - Contrôler la présence du KB via
Get-WindowsPackage
/Get-HotFix
et journaliser le résultat.
Exemples de commandes prêtes à l’emploi
Installation silencieuse immédiate
# Choisir le bon fichier selon votre parc
wusa.exe .\windows10.0-kb5041948-x64-ndp48.msu /quiet /norestart
# ou
wusa.exe .\windows10.0-kb5041964-x64-ndp481.msu /quiet /norestart
Extraction en .cab puis intégration DISM
expand -F:* .\windows10.0-kb5041948-x64-ndp48.msu .\KB5042349
dism /online /add-package /packagepath:".\KB5042349\*.cab" /quiet /norestart
Vérification de l’installation
Get-WindowsPackage -Online |
? PackageName -match 'KB504(1948|1964)' |
Select PackageName, State, InstallTime
Note sur la compatibilité et la sécurité
KB5042349 est un Quality and Security Rollup pour .NET Framework : il regroupe des correctifs de sécurité et de fiabilité récents. Même si l’intitulé du fichier peut prêter à confusion, le contenu a été validé pour Windows Server 2022. Dans les environnements à forte contrainte (banque, santé, industrie), l’application de ces mises à jour par voie manuelle est souvent requise ; assurez‑vous de respecter vos procédures de changement, d’archiver les binaire signés (avec leurs hashes) et de journaliser les codes de sortie d’installation.
Conclusion
Le préfixe windows10.0‑kb…
ne doit pas vous inquiéter : il est lié à la version du noyau et n’empêche en rien la compatibilité avec Windows Server 2022. En suivant les étapes ci‑dessus — choix du bon package, vérification de l’intégrité, installation silencieuse, validations post‑déploiement et automatisation — vous installez KB5042349 dans les règles de l’art, avec un niveau de traçabilité et de fiabilité adapté aux environnements de production.
Fiche mémo ultra‑courte
- Fichier attendu :
windows10.0‑kb5041948‑x64‑ndp48…msu
ouwindows10.0‑kb5041964‑x64‑ndp481…msu
. - Commande :
wusa.exe .\nom_du_fichier.msu /quiet /norestart
. - Vérification :
Get-WindowsPackage -Online | ? PackageName -match 'KB504(1948|1964)'
. - SSU : gardez la pile de maintenance à jour avant d’appliquer la cumulative .NET.
En résumé, l’intitulé « windows10.0‑kb…
» est normal ; le lien du Catalog pour KB5042349 est le bon et le correctif s’installe bien sur Windows Server 2022.