Su Windows Server 2019, dopo il Patch Tuesday di maggio 2024, può capitare che le CU KB5037765 (OS) e KB5037932 (.NET 3.5/4.7.2) risultino “Failed” in Windows Update nonostante più tentativi. Qui trovi una procedura collaudata con DISM, verifica puntuale e pulizia della cronologia.
Panoramica del problema
Dopo l’ondata di aggiornamenti di maggio 2024, diversi amministratori hanno riscontrato che Windows Update segnala ripetutamente il fallimento dell’installazione di:
- KB5037765 – Cumulative Update per Windows Server 2019 (build 17763)
- KB5037932 – Aggiornamento cumulativo per .NET 3.5 / 4.7.2
In molti casi, nella cronologia di Windows Update compare anche KB5038283 come aggiornamento .NET non riuscito, creando confusione sul reale stato del sistema.
Sintomi tipici e cosa significano
- Ripetuti tentativi “Failed” per KB5037765 e/o KB5037932 nella GUI di Windows Update, anche dopo il riavvio.
- Presenza di KB5038283 in stato “Failed” nonostante sia stata installata KB5037932.
- Eventi nel registro (WindowsUpdateClient/Operational o Setup): errori generici (es. 0x802400xx) oppure componenti bloccati da cache/metadati non aggiornati.
È importante distinguere tra stato reale dei pacchetti (ciò che il sistema ha effettivamente installato) e cronologia della GUI di Windows Update, che può rimanere indietro a causa di cache o metadati corrotti.
Diagnosi rapida: verifica prima di intervenire
- Controlla lo stato reale con DISM
DISM /Online /Get-Packages
Se i pacchetti relativi a KB5037765 e KB5037932 risultano State : Installed, gli aggiornamenti sono presenti a prescindere dai “Failed” mostrati in GUI. - Verifica la build (opzionale ma utile per audit):
winver
oppurereg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx
- Controlla lo spazio libero su
%SystemDrive%
: le CU possono richiedere più GB temporanei nella cache (SoftwareDistribution e component store).
Soluzione proposta e verificata
Installazione manuale con DISM
Quando Windows Update fallisce, l’installazione offline con DISM aggira la GUI e lavora direttamente sul component store, risultando spesso risolutiva.
- Scarica i pacchetti
.msu
pertinenti (KB5037765 e KB5037932) e copiali inC:\temp
. - Apri un prompt elevato (cmd come Amministratore) e estraili in
C:\temp\cab
:expand -F:* C:\temp<nome>.msu C:\temp\cab
- Installa il .cab con DISM:
DISM /Online /Add-Package /PackagePath:C:\temp\cab<nome>.cab
Ripeti per entrambi i pacchetti (OS e .NET). Al termine, riavvia il server.
Questo metodo funziona sia per KB5037765 sia per KB5037932. Se hai estratto più file .cab
, applicali uno alla volta (se presenti SSU/LCU nello stesso pacchetto, DISM gestirà l’ordine corretto).
Verifica dello stato reale
Dopo il riavvio, assicurati che i pacchetti risultino installati:
DISM /Online /Get-Packages
Se vedi State : Installed per i pacchetti che contengono i riferimenti a KB5037765 e KB5037932, il sistema è effettivamente aggiornato.
Perché la GUI continua a mostrare “Failed”
- Cache della cronologia: Windows Update conserva i risultati dei tentativi falliti precedenti e non sempre si aggiorna immediatamente dopo un’installazione offline.
- Supersedence: KB5037932 sostituisce KB5038283 (che era un preview di fine aprile). È normale che KB5038283 rimanga “Failed” e non venga più richiesto.
- Metadati corrotti: cartelle
SoftwareDistribution
e/oCatroot2
danneggiate impediscono l’allineamento della cronologia.
Pulizia della cronologia (opzionale ma consigliata)
Se vuoi ripulire la cronologia per allineare la GUI allo stato reale:
net stop wuauserv
net stop cryptSvc
net stop bits
rename %windir%\SoftwareDistribution SoftwareDistribution.old
rename %windir%\System32\catroot2 catroot2.old
net start wuauserv
net start cryptSvc
net start bits
Dopo un nuovo Check for updates, KB5038283 scomparirà o verrà marcato come “non applicabile”.
Approfondimento tecnico
Come funzionano LCU e aggiornamenti .NET
Le LCU (Latest Cumulative Update) per Windows Server 2019 includono tutti i fix precedenti e sostituiscono le CU più vecchie. Gli aggiornamenti .NET hanno una logica simile: ogni nuovo cumulativo sostituisce i precedenti e può rendere non necessario un aggiornamento preview uscito poco prima (come KB5038283 rispetto a KB5037932). Questo spiega perché la GUI può proporre o mostrare “Failed” su un pacchetto ormai superato, senza impatto sulla sicurezza.
Perché DISM funziona quando Windows Update fallisce
DISM applica direttamente i pacchetti al component store (CBS), evitando alcune dipendenze della pipeline di Windows Update (servizi BITS/WUA, metadati, cache). In presenza di cache corrotte o incongruenze nei metadati, DISM risulta più deterministico, soprattutto con pacchetti .cab
estratti da .msu
.
Servicing Stack e ordine di installazione
Le versioni recenti combinano Servicing Stack Update (SSU) e LCU nella stessa distribuzione oppure gestiscono automaticamente l’ordine corretto. Se usi DISM sui .cab
forniti, l’ordine viene determinato dal manifest; non forzarlo manualmente a meno di casi particolari.
Procedure opzionali e best practice
Controlli di salute del sistema
- Esegui SFC (dopo il riavvio, prima di nuovi tentativi):
sfc /scannow
- Esegui DISM RestoreHealth se sospetti corruzione del component store (richiede connettività o una source valida):
DISM /Online /Cleanup-Image /ScanHealth DISM /Online /Cleanup-Image /RestoreHealth
- Verifica che il servizio Windows Modules Installer (
TrustedInstaller
) sia avviato e non bloccato. - Assicurati di avere sufficiente spazio libero su
C:
(consigliati almeno 6–8 GB per stare comodi durante le CU).
Ambienti con WSUS o criteri di gruppo
- Forza una nuova rilevazione dopo la pulizia cache:
UsoClient StartScan
In alcuni ambienti funziona ancora anche:wuauclt /detectnow /reportnow
- Esegui un gpupdate per riallineare policy di Windows Update/WSUS:
gpupdate /force
Alternative all’installazione via DISM
Per i pacchetti .msu
puoi usare anche wusa.exe
:
wusa C:\temp<nome>.msu /quiet /norestart
Tuttavia, se Windows Update ha già mostrato più “Failed”, DISM sui .cab
rimane il percorso più affidabile.
Verifica finale di conformità
Oltre a DISM /Online /Get-Packages
, puoi usare questi comandi per report e audit:
- PowerShell – elenco aggiornamenti:
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 20
Nota:Get-HotFix
non sempre mostra tutti i pacchetti .NET; per la visibilità completa affidati a DISM/WindowsPackage. - PowerShell – verifica CUs specifiche:
Get-WindowsPackage -Online | Where-Object { $_.PackageName -match "KB5037765|KB5037932" } | Select-Object PackageName,ReleaseType,InstallTime,PackageState
- WMIC rapido:
wmic qfe list brief | findstr /i "KB5037765 KB5037932"
Tabella riepilogativa degli aggiornamenti di maggio 2024
Tipo di update | KB | Note utili |
---|---|---|
Cumulativo OS | KB5037765 | Include tutti i fix di sicurezza precedenti; sostituisce le CU più vecchie. |
Cumulativo .NET 3.5/4.7.2 | KB5037932 | Sostituisce KB5038283 (preview di fine aprile); quest’ultimo può rimanere “Failed” senza impatto. |
Domande frequenti
Se DISM /Get-Packages dice “Installed” ma la GUI mostra “Failed”, sono sicuro?
Sì. DISM interroga lo stato effettivo del component store. La cronologia della GUI è solo un registro dei tentativi e può rimanere indietro a causa della cache. Ripulendo SoftwareDistribution
e Catroot2
la GUI si riallinea.
KB5038283 continua a comparire come non riuscito: devo preoccuparmi?
No. È un antecedente preview che viene sostituito da KB5037932. Può rimanere in “Failed” senza alcun effetto sulla sicurezza o sulla conformità, e in genere scompare dopo la pulizia o un nuovo scan.
Posso rimuovere un aggiornamento se crea problemi?
In casi eccezionali sì, ma fallo solo in finestra di manutenzione e dopo aver pianificato il rollback. Esempio:
DISM /Online /Get-Packages | findstr /i KB5037765
DISM /Online /Remove-Package /PackageName:<NomePacchettoCompleto>
Valuta sempre l’impatto sulla sicurezza prima di disinstallare una CU.
È meglio usare WUSA o DISM?
Se provieni da più “Failed” in Windows Update, DISM sui .cab
estratti è più affidabile perché aggira cache e metadati problematici. WUSA sui .msu
può funzionare ma non affronta le cause alla radice se la cache è corrotta.
Serve eseguire SFC e DISM RestoreHealth ogni volta?
Non sempre. Falli se sospetti corruzione del component store o se l’installazione offline non parte. Sono check a basso impatto, utili per prevenire ripetizioni di errori.
Uso WSUS: perché la console centrale dice una cosa e il server un’altra?
WSUS si basa su report inviati dal client. Dopo installazioni offline e pulizia cache, forza la rilevazione (UsoClient StartScan
) e il report. Il dato centrale si allinea dopo il ciclo di rilevazione/sincronizzazione.
Checklist operativa
- Backup e finestra di manutenzione.
- Scarica KB5037765 e KB5037932 in
C:\temp
. - Estrai i
.msu
inC:\temp\cab
:expand -F:* C:\temp<nome>.msu C:\temp\cab
- Installa i
.cab
con DISM:DISM /Online /Add-Package /PackagePath:C:\temp\cab<nome>.cab
- Riavvia il server.
- Verifica lo stato reale:
DISM /Online /Get-Packages
- Pulisci (opzionale) la cache:
net stop wuauserv net stop cryptSvc net stop bits rename %windir%\SoftwareDistribution SoftwareDistribution.old rename %windir%\System32\catroot2 catroot2.old net start wuauserv net start cryptSvc net start bits
- Avvia una nuova rilevazione:
UsoClient StartScan
Script PowerShell di esempio per automazione
Lo script seguente automatizza estrazione e installazione dei pacchetti .msu
, esegue la verifica e, facoltativamente, ripulisce la cache di Windows Update. Eseguilo in una sessione elevata.
param(
[Parameter(Mandatory = $true)]
[string[]] $MsuPaths,
[switch] $CleanWUCache
)
function Install-MsuWithDism {
param([string] $MsuPath)
$tempCab = Join-Path -Path $env:TEMP -ChildPath ("cab" + [IO.Path]::GetFileNameWithoutExtension($MsuPath) + "" + (Get-Date -Format "yyyyMMddHHmmss"))
New-Item -ItemType Directory -Path $tempCab -Force | Out-Null
Write-Host "Estrazione: $MsuPath -> $tempCab"
& "$env:SystemRoot\System32\expand.exe" -F:* $MsuPath $tempCab | Out-Null
$cabs = Get-ChildItem -Path $tempCab -Filter *.cab -Recurse
if (-not $cabs) {
throw "Nessun .cab trovato in $tempCab"
}
foreach ($cab in $cabs) {
Write-Host "Installazione CAB con DISM: $($cab.FullName)"
& "$env:SystemRoot\System32\dism.exe" /Online /Add-Package /PackagePath:$cab.FullName /NoRestart
if ($LASTEXITCODE -ne 0) {
throw "DISM ha restituito codice $LASTEXITCODE per $($cab.Name)"
}
}
Write-Host "Pulizia temporanei: $tempCab"
Remove-Item -Recurse -Force $tempCab
}
foreach ($msu in $MsuPaths) {
Install-MsuWithDism -MsuPath $msu
}
Write-Host "Verifica pacchetti installati (KB5037765/KB5037932):"
Get-WindowsPackage -Online | Where-Object { $_.PackageName -match "KB5037765|KB5037932" } |
Select-Object PackageName,PackageState,InstallTime | Format-Table -AutoSize
if ($CleanWUCache) {
Write-Host "Ripristino cache Windows Update..."
Start-Process -FilePath "cmd.exe" -ArgumentList '/c net stop wuauserv && net stop cryptSvc && net stop bits && rename "%windir%\SoftwareDistribution" SoftwareDistribution.old && rename "%windir%\System32\catroot2" catroot2.old && net start wuauserv && net start cryptSvc && net start bits' -Wait -Verb RunAs
Write-Host "Forzo nuova rilevazione..."
Start-Process -FilePath "$env:SystemRoot\System32\UsoClient.exe" -ArgumentList "StartScan" -WindowStyle Hidden
Write-Host "Completato. Esegui un riavvio se richiesto."
}
Errori frequenti e come interpretarli
Codice | Contesto | Indicazioni |
---|---|---|
0x8024001E / 0x80240034 | Windows Update | Problemi di download/metadati. Procedi con pulizia cache e installazione offline. |
0x800f0922 | DISM/WUSA | Spazio o connettività a Servicing Stack. Verifica spazio su C:, prova RestoreHealth . |
0x80073701 | DISM | Componenti mancanti. Esegui DISM /Online /Cleanup-Image /RestoreHealth e riprova. |
Buone pratiche operative
- Pianifica il riavvio in finestra di manutenzione, soprattutto su host Hyper‑V o ruoli critici.
- Evita tool di “ottimizzazione” che puliscono aggressivamente
WinSxS
: possono rimuovere manifest indispensabili alla CU. - Monitora i log:
C:\Windows\Logs\CBS\CBS.log
eWindowsUpdate.log
(da ricostruire conGet-WindowsUpdateLog
). - Conserva i pacchetti installati per audit (nome file e hash) in un repository interno.
Conclusioni
Nel caso specifico di maggio 2024, i “Failed” multipli in Windows Update non indicano necessariamente che il server sia rimasto indietro. Se DISM /Get-Packages
riporta KB5037765 e KB5037932 in stato Installed, la macchina è effettivamente aggiornata. La persistenza di KB5038283 come “Failed” è un effetto collaterale della supersedence e della cache, privo di impatti; se desideri, puoi rimuovere l’anomalia ripristinando SoftwareDistribution
e Catroot2
e rieseguendo lo scan. L’installazione offline con DISM sui .cab
estratti rimane la strada più affidabile per riportare rapidamente il nodo in compliance.
Riepilogo operativo in una riga: installa offline (expand → DISM), riavvia, verifica con DISM /Get-Packages
, e se serve ripulisci la cache di Windows Update; puoi ignorare gli “Failed” residui se i pacchetti risultano Installed.
Nota: Esegui sempre queste operazioni con privilegi elevati e all’interno di una finestra di manutenzione programmata.