WMIC non fa più parte di Windows 11 24H2 e viene rimosso automaticamente subito dopo l’OOBE: ecco perché succede, quali rischi comporta per la tua infrastruttura IT e le strategie pratiche per migrare verso PowerShell / CIM senza bloccare i flussi di lavoro.
Contesto e problema
Nelle versioni di Windows precedenti (fino a 22H2) il pacchetto Feature on Demand WMIC
poteva essere aggiunto o mantenuto con il comando:
DISM /Online /Add-Capability /CapabilityName:WMIC~~~~0.0.1.0
Su Windows 11 24H2, invece, capita spesso di osservare la sequenza seguente:
- La task sequence di installazione (SCCM, MDT, Autopilot, script DISM) aggiunge correttamente WMIC e l’eseguibile finisce in
C:\Windows\System32\wbem\wmic.exe
. - Alla prima accensione, durante la fase OOBE (la schermata blu di benvenuto), il provisioning agent elimina la FOD “WMIC” e registra la rimozione in
CBS.log
. - Tutti gli altri componenti opzionali (come
RSAT
,SNMP
oOpenSSH.Client
) restano intatti. - Ogni tentativo di reinstallare WMIC dopo il primo logon richiede minuti, talvolta va in timeout o si conclude con l’errore
0x800f0922
.
Perché Microsoft ha scelto di eliminare WMIC
Il motivo non è un bug di SCCM né un problema di rete; è una precisa decisione di ingegneria di Microsoft:
- WMIC è deprecato ufficialmente dal 2017. Microsoft ne scoraggia l’uso a favore di cmdlet PowerShell (
Get‑CimInstance
,Invoke‑CimMethod
ecc.) o delle API WMI/CIM. - Con 24H2, Windows 11 introduce una routine di cleanup in fase OOBE. L’agente controlla se la FOD “WMIC” è presente e, se sì, la rimuove per impostazione predefinita, allo scopo di uniformare la piattaforma e ridurre il carico di patching su componenti legacy.
- Lo stesso pacchetto FOD resta installabile a mano per scenari di laboratorio, ma ogni processo di provisioning o di reset del dispositivo lo cancella di nuovo.
Implicazioni per amministratori, DevOps e vendor
Sono ancora migliaia gli script Batch, VBScript, ma soprattutto i tool di terze parti che chiamano wmic.exe
per inventariare hardware, cambiare il product key o estrarre informazioni dal BIOS. Con 24H2 questi script falliranno con errori del tipo:
'wmic' non è riconosciuto come comando interno o esterno...
L’impatto può estendersi a:
- Distribuzioni zero‑touch via Autopilot, dove l’intero flusso di impostazione dipende dall’esecuzione di script storici.
- Sistemi di monitoraggio che interrogano WMI tramite WMIC in remoto.
- Applicazioni legacy confezionate con moduli interni che eseguono WMIC tramite
Process.Start()
. - Sicurezza: sono note procedure di hardening che disabilitano componenti o servizi in base all’output di WMIC; la loro logica va rivista.
Analisi tecnica: cosa succede nei log
Se apri %windir%\Logs\CBS\CBS.log
subito dopo aver completato l’OOBE, troverai righe simili:
Info CBS Exec: Processing advanced operation: Removal (Package: WMIC-Package~31bf3856ad364e35~amd64~~10.0.25905.1000)
Il numero di versione (nell’esempio 25905) può variare in base alla build, ma la sequenza è sempre la stessa:
- L’agente CBS riceve un task di rimozione (tipe Removal).
- Verifica le dipendenze: nessuna, perché WMIC non è richiesta da altri componenti.
- Disinstalla il pacchetto e cancella la cartella
%windir%\System32\wbem
relativa a WMIC.
Il fatto che la rimozione avvenga prima del primo logon spiega perché reinstallare WMIC all’interno di una task sequence non funziona: quando la macchina entra in OOBE il pacchetto è ancora lì, ma minuti dopo scompare.
Opzioni di mitigazione
Strategia | Come funziona | Vantaggi | Limitazioni |
---|---|---|---|
Migrare a PowerShell/CIM | Convertire i comandi WMIC nei cmdlet nativi (Get‑WmiObject , Get‑CimInstance , Invoke‑CimMethod ). | Supporto futuro garantito; script moderni; zero FOD da gestire. | Richiede refactoring di ogni script/app che invoca WMIC. |
Esecuzione remota di WMIC | Usare un host che conserva WMIC (es. Win 10 22H2, WinPE, server legacy) e lanciare wmic /node:<target> . | Nessuna installazione locale su 24H2. | Devi aprire porte WMI; infrastruttura più complessa. |
Posticipare l’upgrade | Mantenere 22H2 finché i vendor non rimuovono la dipendenza. | Continuità immediata. | Perdi i vantaggi di 24H2; supporto 22H2 scadenza 14 ottobre 2026. |
Coinvolgere vendor e Microsoft | Aprire ticket su Microsoft Learn/Q&A o presso i fornitori dei tool. | Può accelerare patch/aggiornamenti. | Nessuna soluzione immediata; risorse da impegnare. |
Strategia raccomandata: migrazione a PowerShell/CIM
In prospettiva, l’unica strada sostenibile consiste nell’abbandonare WMIC. Ecco perché:
- Supporto a lungo termine: PowerShell 5.1 (in‑box) e PowerShell 7.x (core) continueranno ad essere aggiornati ben oltre il ciclo di vita di WMIC.
- Migliori prestazioni e sicurezza: l’approccio CIM usa sessioni persistenti e autenticazione moderna (Kerberos, CredSSP, certificate‑based).
- Coerenza multipiattaforma: i cmdlet CIM funzionano anche su Linux e macOS tramite OMI o WS‑Management.
- Automazione DevOps: pipeline CI/CD basate su PowerShell Core integrano nativamente i moduli CIM.
Esempi di conversione rapida
Tabella di equivalenza tra i comandi WMIC più comuni e i loro corrispettivi PowerShell:
WMIC | PowerShell (CIM) |
---|---|
wmic bios get serialnumber | (Get‑CimInstance -ClassName Win32_BIOS).SerialNumber |
wmic cpu get name | (Get‑CimInstance -ClassName Win32_Processor).Name |
wmic logicaldisk get deviceid,freespace | Get‑CimInstance Win32_LogicalDisk | select DeviceID,FreeSpace |
wmic product where name="XYZ" call uninstall | $app = Get‑CimInstance Win32_Product -Filter "Name='XYZ'"; Invoke‑CimMethod -InputObject $app -MethodName Uninstall |
Script di discovery automatico
Per individuare gli script Batch/PS1 che chiamano WMIC in un file share Git o in un repository Azure DevOps, un semplice comando PowerShell può aiutarti:
Get‑ChildItem -Recurse -Include .bat,.cmd,.ps1,.psm1 `
| Select‑String -Pattern '\bwmic(\.exe)?\b' `
| Select Path,LineNumber,Line
Esporta il risultato in CSV, analizzalo, classifica le priorità e pianifica il refactoring.
Esecuzione remota di WMIC: scenario di transizione
Se hai vincoli temporali (contratti di manutenzione, scadenze di supporto) e non puoi toccare il codice, l’alternativa è lanciare WMIC da remoto:
- Prepara un server jump‑box con Windows 10 22H2, patchato e isolato.
- Apri la porta 135 (RPC) e il range dinamico WMI verso i client 24H2.
- Esegui, ad esempio:
wmic /node:PC24H2 product get name,version
Questa soluzione funziona perché il servizio WMI rimane pienamente operativo sul client; manca solo la CLI locale.
Quando conviene davvero posticipare l’aggiornamento
Bloccare il passaggio a 24H2 può essere sensato se:
- Devi garantire la compatibilità con software medicale o industriale certificato esclusivamente per 22H2.
- Hai decine di appliance OEM che integrano WMIC in processi di rete proprietari.
- I vendor hanno già annunciato una patch, ma non prima di sei mesi.
Ricorda però che 22H2 (edizione Enterprise ed Education) riceverà l’ultimo security update martedì 14 ottobre 2026. Ogni rinvio oltre tale data espone a rischi CVE non corretti.
Comunicazione interna ed esterna
La riuscita della migrazione non dipende solo dal codice ma anche dalle persone: Stakeholder IT Prepara un change management plan ufficiale, indicando tempi, responsabilità e rollback. Team di sviluppo Fornisci snippet di esempio, guida di stile e una checklist di test per le app migrate. Help desk Assicura che gli operatori sappiano riconoscere l’errore “wmic non riconosciuto” e indirizzino correttamente le segnalazioni. Vendor esterni Invia subito un product‑impact‑statement chiedendo tempi di adeguamento e versioni compatibili con 24H2.
Domande frequenti (FAQ)
Posso bloccare la rimozione di WMIC con una policy?
Al momento non esiste una GPO né un’impostazione CSP che impedisca al provisioning agent di disinstallare la FOD WMIC. Ogni tentativo documentato viene annullato alla prima OOBE o al prossimo in‑place upgrade.
Se scarico l’eseguibile WMIC da un altro PC e lo copio in System32?
Fallisce. WMIC dipende da librerie COM e MOF che fanno parte del pacchetto FOD; senza di esse l’eseguibile va in crash con Faulting module ntdll.dll
.
PowerShell è sempre installato? Serve abilitare qualcosa?
Windows 11 include PowerShell 5.1 per default; PowerShell 7.x è consigliato per script nuovi ma va distribuito via winget
, Intune o script MSI.
Posso continuare a usare Get‑WmiObject
?
Sì, ma è anch’esso marcato deprecated. Microsoft consiglia di preferire Get‑CimInstance
, che usa WS‑Man e funziona anche su computer remoti attraverso WinRM senza DCOM.
Roadmap di migrazione consigliata
- Audit completo di script, sorgenti e applicativi che invocano WMIC (vedi script di discovery).
- Classificazione per priorità (blocco business critical, nice‑to‑have, obsoleto).
- Pilot su 24H2 con cohort limitata di dispositivi e feature update in ring separato.
- Refactoring agile: ciclo Pick‑Convert‑Test‑Deploy, documentando ogni conversione.
- Monitoraggio via Intune o Configuration Manager: report di errori script, telemetria e KPI.
- Go‑live progressivo (25 %/50 %/100 %) — rollback automatico a 22H2 solo se KPI di stabilità scendono sotto le soglie SLA.
Best practice per script PowerShell moderni
- Usa il modulo
PSDesiredStateConfiguration
per assicurarti che i componenti WMI richiesti siano presenti. - Connetti ai computer remoti via
Enter‑PSSession ‑UseSSL
oInvoke‑Command
con autenticazione Kerberos ove possibile. - Serializza l’output in JSON con
ConvertTo‑Json
per una più facile ingestione in API REST o SIEM. - Gestisci gli errori con
try / catch
e logga eventi inMicrosoft‑Windows‑PowerShell/Operational
. - Versiona i moduli in un feed interno NuGet o Azure Artifacts per mantenerli allineati.
Checklist veloce post‑migrazione
Prima di passare interamente a 24H2 verifica che:
- Tutti i device nel ring pilot abbiano completato due cicli di Patch Tuesday senza tornare in roaming WMIC.
- Le pipeline DevOps non richiamino più
wmic
in task di compilazione o rilascio. - I runbook di disaster recovery e BCP siano stati aggiornati con i nuovi comandi PowerShell/CIM.
- I documenti interni di Standard Operating Procedures riflettano la deprecazione.
- Il SOC e il team di compliance abbiano validato i log WMI generati da CIM per coerenza e tamper‑proof hash.
Conclusione
La rimozione automatica di WMIC in Windows 11 24H2 non è un errore da aggirare, ma un segnale chiaro che l’ecosistema Windows sta abbandonando le interfacce legacy a favore di soluzioni moderne, sicure e aperte. Continuare a investire tempo nel ripristinare WMIC produrrebbe solo technical debt; dirigere invece le risorse verso PowerShell e CIM garantirà compatibilità futuribile, prestazioni migliori e una gestione più robusta dell’ambiente IT.
Prossimi passi consigliati:
- Pianifica oggi un workshop interno su PowerShell CIM per i team di scripting.
- Esegui subito lo script di discovery per mappare l’uso di WMIC nei tuoi repository.
- Blocca le nuove dipendenze: imposta Code Review obbligatoria per ogni commit che richiami
wmic
. - Includi la migrazione nella roadmap IT 2025 ↔ 2026 e monitora gli annunci Microsoft sul ciclo di vita delle FOD.
Una transizione proattiva ora eviterà emergenze domani — perché la CLI più famosa di WMI ha ormai fatto il suo tempo.