Gestione delle funzionalità e delle immagini di Windows con DISM e PowerShell

Panoramica

In questo articolo trattiamo in parallelo DISM (Deployment Image Servicing and Management) e PowerShell (wrapper delle API DISM), organizzando per argomento le operazioni ricorrenti, le opzioni chiave e gli esempi pronti all’uso.

Convenzioni di variabile

Variabile Esempio Note
<<IMAGE_PATH>> C:\mount o E:\Windows Percorso Windows offline per /Image: (cartella montata o directory Windows su altro disco)
<<FEATURE_NAME>> NetFx3 Nome della funzionalità di Windows
<<CAPABILITY_NAME>> OpenSSH.Client~~~~0.0.1.0 Nome della funzionalità aggiuntiva (FoD: Features on Demand)
<<WIM_PATH>> D:\sources\install.wim File immagine WIM/ESD
<<INDEX>> 1 Indice dell’immagine
<<MOUNT_DIR>> C:\mount Directory di montaggio
<<DRIVER_DIR>> D:\drivers Cartella contenente INF dei driver
<<PACKAGE_PATH>> C:\Updates\kb5005565.cab File pacchetto di aggiornamento
<<LANG_PACK>> C:\LP\ja-jp\lp.cab CAB del language pack
<<SOURCE_PATH>> D:\sources\sxs Percorso sorgente (es. NetFx3)
<<APPLY_DIR>> C:\ Destinazione di applicazione/estrazione
<<SCRATCH_DIR>> C:\Temp\Scratch Directory di lavoro
<<LOG_PATH>> C:\Temp\dism.log Percorso log

Quasi tutti i comandi accettano anche /ScratchDir:<<SCRATCH_DIR>> e /LogPath:<<LOG_PATH>>.


Step 1: Selezione del target (/Online oppure /Image)

Molti comandi DISM richiedono la specifica esplicita del target.

Opzione Significato Esempio
/Online Sistema Windows attualmente in esecuzione dism /Online /Cleanup-Image /CheckHealth
/Image:<<IMAGE_PATH>> Windows offline o immagine montata dism /Image:C:\mount /Add-Driver /Driver:D:\drivers /Recurse

Step 2: Verifica delle funzionalità (/Get-Features, /Get-FeatureInfo)

Descrizione

Elenca le funzionalità disponibili e il loro stato (Enabled / Disabled / DisabledWithPayloadRemoved).

Opzioni principali

Opzione Significato Esempio
/Online Target: sistema corrente dism /Online /Get-Features
/Image:<<IMAGE_PATH>> Target: ambiente offline dism /Image:C:\mount /Get-Features
/Get-Features Elenco funzionalità dism /Online /Get-Features /Format:Table
/Get-FeatureInfo Dettagli di una funzionalità dism /Online /Get-FeatureInfo /FeatureName:NetFx3
/FeatureName:<<FEATURE_NAME>> Nome funzionalità NetFx3
/Format:Table Uscita tabellare dism /Online /Get-Features /Format:Table

Esempi

# Elenca tutte le funzionalità con stato
dism /Online /Get-Features /Format:Table

# Dettagli della funzionalità NetFx3
dism /Online /Get-FeatureInfo /FeatureName:NetFx3

Se lo stato è DisabledWithPayloadRemoved, i binari sono stati rimossi: occorre indicare /Source.


Step 3: Abilitazione/Disabilitazione delle funzionalità (/Enable-Feature, /Disable-Feature)

Descrizione

Abilita o disabilita funzionalità come .NET Framework 3.5 o SMB 1.0.

Opzioni principali

Opzione Significato Esempio
/Online Target: sistema corrente dism /Online /Enable-Feature /FeatureName:NetFx3
/FeatureName:<<FEATURE_NAME>> Funzionalità da gestire NetFx3
/All Abilita anche le dipendenze
/Source:<<SOURCE_PATH>> Sorgente per payload rimossi dism /Online /Enable-Feature /FeatureName:NetFx3 /Source:D:\sources\sxs
/LimitAccess Non usare Windows Update/WSUS
/Enable-Feature Abilita funzionalità dism /Online /Enable-Feature /FeatureName:SMB1Protocol
/Disable-Feature Disabilita funzionalità dism /Online /Disable-Feature /FeatureName:SMB1Protocol
/LogPath:<<LOG_PATH>> Log

Esempi

# Abilita .NET Framework 3.5 da sorgente locale, senza Internet
dism /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:<<SOURCE_PATH>> /LogPath:<<LOG_PATH>>

# Disabilita SMB1 per rafforzare la sicurezza
dism /Online /Disable-Feature /FeatureName:SMB1Protocol /LogPath:<<LOG_PATH>>

Step 4: Verifica delle Capabilities (/Get-Capabilities, /Get-CapabilityInfo)

Descrizione

Elenca e verifica lo stato delle FoD (Features on Demand), ad es. RSAT, OpenSSH.Client, Language.Basic.

Opzioni principali

Opzione Significato Esempio
/Online Sistema corrente dism /Online /Get-Capabilities
/Image:<<IMAGE_PATH>> Ambiente offline dism /Image:C:\mount /Get-Capabilities
/Get-Capabilities Elenco Capabilities dism /Online /Get-Capabilities /Format:Table
/Get-CapabilityInfo Dettagli di una Capability dism /Online /Get-CapabilityInfo /CapabilityName:OpenSSH.Client~~~~0.0.1.0
/Format:Table Uscita tabellare dism /Online /Get-Capabilities /Format:Table

Esempi

# Elenco completo delle Capabilities disponibili
dism /Online /Get-Capabilities /Format:Table

# Dettaglio di una Capability
dism /Online /Get-CapabilityInfo /CapabilityName:<<CAPABILITY_NAME>>

Le Capabilities si possono aggiungere tramite Windows Update, WSUS o ISO FoD/percorsi di rete.


Step 5: Aggiunta/Rimozione di Capabilities (/Add-Capability, /Remove-Capability)

Descrizione

Aggiunge o rimuove componenti on-demand come OpenSSH o gli strumenti RSAT.

Opzioni principali

Opzione Significato Esempio
/Online Sistema corrente dism /Online /Add-Capability
/CapabilityName:<<CAPABILITY_NAME>> Capabilità da gestire OpenSSH.Client~~~~0.0.1.0
/Source:<<SOURCE_PATH>> Sorgente (ISO FoD o condivisione) dism /Online /Add-Capability /CapabilityName:OpenSSH.Client~~~~0.0.1.0 /Source:D:\ /LimitAccess
/LimitAccess Usa solo la sorgente specificata
/LogPath:<<LOG_PATH>> Log

Esempi

# Aggiunge OpenSSH.Client
dism /Online /Add-Capability /CapabilityName:<<CAPABILITY_NAME>> /LogPath:<<LOG_PATH>>

# Rimuove componenti RSAT non necessari
dism /Online /Remove-Capability /CapabilityName:<<CAPABILITY_NAME>> /LogPath:<<LOG_PATH>>

Step 6: Ripristino immagine e gestione component store (/Cleanup-Image)

Descrizione

Rileva/ripara danni al WinSxS (component store) e ottimizza lo spazio.

Opzioni principali

Opzione Significato Esempio
/Online Sistema corrente dism /Online /Cleanup-Image /CheckHealth
/CheckHealth Verifica rapida
/ScanHealth Scansione approfondita
/RestoreHealth Riparazione dism /Online /Cleanup-Image /RestoreHealth
/Source:<<SOURCE_PATH>> Sorgente per la riparazione
/LimitAccess Evita Windows Update
/StartComponentCleanup Pulisce aggiornamenti obsoleti
/ResetBase Congela lo stato (rollback non possibile)
/AnalyzeComponentStore Analisi dimensioni store

Esempi

# Verifica rapida
dism /Online /Cleanup-Image /CheckHealth

# Scansione completa
dism /Online /Cleanup-Image /ScanHealth

# Riparazione con sorgente locale
dism /Online /Cleanup-Image /RestoreHealth /Source:<<SOURCE_PATH>> /LimitAccess /LogPath:<<LOG_PATH>>

# Pulizia e consolidamento aggiornamenti
dism /Online /Cleanup-Image /StartComponentCleanup /ResetBase /LogPath:<<LOG_PATH>>

Step 7: Informazioni sull’immagine (/Get-ImageInfo)

Opzioni principali

Opzione Significato Esempio
/Get-ImageInfo Info sulle immagini in WIM/ESD dism /Get-ImageInfo /ImageFile:install.wim
/ImageFile:<<WIM_PATH>> File WIM target
/Index:<<INDEX>> Indice da interrogare
/LogPath:<<LOG_PATH>> Log

Esempio

# Verifica edizioni e indici di install.wim
dism /Get-ImageInfo /ImageFile:<<WIM_PATH>> /LogPath:<<LOG_PATH>>

Step 8: Montare e smontare immagini offline

Opzioni principali

Opzione Significato Esempio
/Mount-Wim Monta WIM
/WimFile:<<WIM_PATH>> File WIM di origine
/Index:<<INDEX>> Indice da montare
/MountDir:<<MOUNT_DIR>> Cartella di montaggio
/ReadOnly Montaggio in sola lettura
/Get-MountedWimInfo Stato dei montaggi
/Unmount-Wim Smonta
/Commit Salva modifiche
/Discard Scarta modifiche

Esempi

# Monta per la modifica
dism /Mount-Wim /WimFile:<<WIM_PATH>> /Index:<<INDEX>> /MountDir:<<MOUNT_DIR>>

# Verifica stato di montaggio
dism /Get-MountedWimInfo

# Salva e smonta
dism /Unmount-Wim /MountDir:<<MOUNT_DIR>> /Commit

Step 9: Integrazione di driver, pacchetti e language pack

Opzioni principali

Opzione Significato Esempio
/Online Target: sistema corrente
/Image:<<MOUNT_DIR>> Target: immagine offline
/Add-Driver Aggiunge driver
/Driver:<<DRIVER_DIR>> Cartella INF
/Recurse Include sottocartelle
/Add-Package Aggiunge aggiornamenti/L.P.
/PackagePath:<<PACKAGE_PATH>> Percorso pacchetto
/Set-AllIntl:ja-JP Imposta locale/lingua

Note:

  • /Add-Driver è solo offline.
  • /Add-Package e /Set-AllIntl sono possibili sia online sia offline.

Esempi

# Integrazione driver
dism /Image:<<MOUNT_DIR>> /Add-Driver /Driver:<<DRIVER_DIR>> /Recurse

# Integrazione aggiornamenti
dism /Image:<<MOUNT_DIR>> /Add-Package /PackagePath:<<PACKAGE_PATH>>

# Aggiunta language pack e locale
dism /Image:<<MOUNT_DIR>> /Add-Package /PackagePath:<<LANG_PACK>>
dism /Image:<<MOUNT_DIR>> /Set-AllIntl:ja-JP

Step 10: Cattura, esportazione e applicazione di immagini

Opzioni principali

Opzione Significato Esempio
/Capture-Image Cattura una cartella in WIM
/ImageFile:<<WIM_PATH>> Output WIM
/CaptureDir:<<APPLY_DIR>> Directory sorgente
/Name:"<nome>" Nome immagine
/Export-Image Esporta/comprime WIM esistente
/Apply-Image Applica WIM
/Compress:max Compressione massima
/ApplyDir:<<APPLY_DIR>> Directory di destinazione

Esempi

# Cattura configurazione corrente
dism /Capture-Image /ImageFile:D:\Custom.wim /CaptureDir:<<APPLY_DIR>> /Name:"Custom Image"

# Esporta con massima compressione
dism /Export-Image /SourceImageFile:<<WIM_PATH>> /SourceIndex:<<INDEX>> /DestinationImageFile:D:\install_compressed.wim /Compress:max

# Applica l’immagine
dism /Apply-Image /ImageFile:<<WIM_PATH>> /Index:<<INDEX>> /ApplyDir:<<APPLY_DIR>>

Step 11: Comandi equivalenti in PowerShell

Tabella di corrispondenza

Ambito Comando DISM Cmdlet PowerShell Scopo
Funzionalità (lista/dettagli) /Get-Features, /Get-FeatureInfo Get-WindowsOptionalFeature Elenco e dettaglio
Abilita/Disabilita funzionalità /Enable-Feature, /Disable-Feature Enable-WindowsOptionalFeature, Disable-WindowsOptionalFeature Gestione feature
Capabilities (lista/dettagli) /Get-Capabilities, /Get-CapabilityInfo Get-WindowsCapability Elenco e dettaglio
Aggiungi/Rimuovi Capabilities /Add-Capability, /Remove-Capability Add-WindowsCapability, Remove-WindowsCapability FoD
Pacchetti (info/integrazione) /Get-Packages, /Add-Package Get-WindowsPackage, Add-WindowsPackage Aggiornamenti/L.P.
Driver (info/integrazione/rimozione) /Get-Drivers, /Add-Driver, /Remove-Driver Get-WindowsDriver, Add-WindowsDriver, Remove-WindowsDriver Soprattutto offline
Info/Monte WIM /Get-ImageInfo, /Mount-Wim, /Unmount-Wim Get-WindowsImage, Mount-WindowsImage, Dismount-WindowsImage Gestione WIM

11.1 Funzionalità (Features)

Get-WindowsOptionalFeature

Opzione Significato Esempio
-Online Sistema corrente Get-WindowsOptionalFeature -Online -FeatureName <<FEATURE_NAME>>
-Path <<IMAGE_PATH>> Target offline Get-WindowsOptionalFeature -Path <<IMAGE_PATH>>
-FeatureName <<FEATURE_NAME>> Nome funzionalità -FeatureName NetFx3
# Elenco (online)
Get-WindowsOptionalFeature -Online

# Dettaglio (offline)
Get-WindowsOptionalFeature -Path <<IMAGE_PATH>> -FeatureName <<FEATURE_NAME>>

Enable-/Disable-WindowsOptionalFeature

Opzione Significato Esempio
-Online / -Path <<IMAGE_PATH>> Selezione target Enable-WindowsOptionalFeature -Online
-FeatureName <<FEATURE_NAME>> Nome funzionalità -FeatureName NetFx3
-All Includi dipendenze -All
-Source <<SOURCE_PATH>> Sorgente payload -Source <<SOURCE_PATH>>
# Abilita NetFx3 con sorgente
Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -All -Source <<SOURCE_PATH>>

# Disabilita SMB1
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

11.2 Capabilities

Get-WindowsCapability

Opzione Significato Esempio
-Online Sistema corrente Get-WindowsCapability -Online
-Name <<CAPABILITY_NAME>> Supporta wildcard Get-WindowsCapability -Online -Name OpenSSH.*
-Path <<IMAGE_PATH>> Target offline Get-WindowsCapability -Path <<IMAGE_PATH>>
# Elenco (online)
Get-WindowsCapability -Online

# Filtro su una capability
Get-WindowsCapability -Online -Name <<CAPABILITY_NAME>>

Add-/Remove-WindowsCapability

Opzione Significato Esempio
-Online / -Path <<IMAGE_PATH>> Target Add-WindowsCapability -Online
-Name <<CAPABILITY_NAME>> Nome capability -Name OpenSSH.Client~~~~0.0.1.0
-Source <<SOURCE_PATH>> Sorgente FoD -Source <<SOURCE_PATH>>
# Aggiunta (online, con sorgente se necessario)
Add-WindowsCapability -Online -Name <<CAPABILITY_NAME>>

# Rimozione
Remove-WindowsCapability -Online -Name <<CAPABILITY_NAME>>

11.3 Pacchetti (aggiornamenti e language pack)

Get-WindowsPackage

Opzione Significato Esempio
-Online / -Path <<IMAGE_PATH>> Target Get-WindowsPackage -Online
-PackagePath <<PACKAGE_PATH>> Info su un pacchetto Get-WindowsPackage -Online -PackagePath <<PACKAGE_PATH>>
# Elenca pacchetti installati (online)
Get-WindowsPackage -Online

Add-WindowsPackage

Opzione Significato Esempio
-Online / -Path <<IMAGE_PATH>> Target Add-WindowsPackage -Online -PackagePath <<PACKAGE_PATH>>
-PackagePath <<PACKAGE_PATH>> .cab (consigliato) / .msu
# Integrazione aggiornamento (online)
Add-WindowsPackage -Online -PackagePath <<PACKAGE_PATH>>

# Integrazione language pack (offline)
Add-WindowsPackage -Path <<IMAGE_PATH>> -PackagePath <<LANG_PACK>>

11.4 Driver

Get-WindowsDriver

Opzione Significato Esempio
-Online / -Path <<IMAGE_PATH>> Target Get-WindowsDriver -Path <<IMAGE_PATH>>
-All Mostra tutti i driver -All
# Elenca i driver di un’immagine offline
Get-WindowsDriver -Path <<IMAGE_PATH>> -All

Add-/Remove-WindowsDriver

Opzione Significato Esempio
-Path <<IMAGE_PATH>> Target immagine Add-WindowsDriver -Path <<IMAGE_PATH>> -Driver <<DRIVER_DIR>> -Recurse
-Driver <<DRIVER_DIR>> Cartella INF
-Recurse Include sottocartelle
-Driver <<oem*.inf>> (Remove) INF da rimuovere Remove-WindowsDriver -Path <<IMAGE_PATH>> -Driver oem1.inf
# Aggiunta (offline)
Add-WindowsDriver -Path <<IMAGE_PATH>> -Driver <<DRIVER_DIR>> -Recurse

# Rimozione (offline)
Remove-WindowsDriver -Path <<IMAGE_PATH>> -Driver oem1.inf

Importante: Add-/Remove-WindowsDriver non supporta -Online; l’uso corretto è offline.


11.5 Info e montaggio immagini

Get-WindowsImage

Opzione Significato Esempio
-ImagePath <<WIM_PATH>> Percorso WIM/ESD Get-WindowsImage -ImagePath <<WIM_PATH>>
-Index <<INDEX>> Solo indice specifico -Index <<INDEX>>
# Elenco indici di install.wim
Get-WindowsImage -ImagePath <<WIM_PATH>>

Mount-/Dismount-WindowsImage

Opzione Significato
-ImagePath <<WIM_PATH>> WIM sorgente
-Index <<INDEX>> Indice da montare
-Path <<MOUNT_DIR>> Cartella di montaggio
-ReadOnly Montaggio in sola lettura
-ScratchDirectory <<SCRATCH_DIR>> Directory di lavoro
-Save (Dismount) Salva modifiche
-Discard (Dismount) Scarta modifiche
# Monta
Mount-WindowsImage -ImagePath <<WIM_PATH>> -Index <<INDEX>> -Path <<MOUNT_DIR>>

# Salva e smonta
Dismount-WindowsImage -Path <<MOUNT_DIR>> -Save

Riepilogo

  • DISM: gestione di basso livello di componenti OS, WIM, aggiornamenti e driver.
  • PowerShell (API DISM): stesse capacità con scripting per inventariare, selezionare e automatizzare.
  • Capabilities (FoD): funzionalità on-demand (OpenSSH, RSAT, language pack).