Gestión de funcionalidades e imágenes de Windows con DISM y PowerShell

Resumen

Este artículo aborda en paralelo DISM (Deployment Image Servicing and Management) y PowerShell (envoltorios de la API de DISM), organizando operaciones frecuentes con ejemplos, opciones y comportamiento esperado.

Notación de variables

Variable Ejemplo Nota
<<IMAGE_PATH>> C:\mount o E:\Windows Ruta para /Image: que apunta a un Windows fuera de línea (carpeta montada o directorio Windows en otro disco)
<<FEATURE_NAME>> NetFx3 Nombre de la funcionalidad de Windows
<<CAPABILITY_NAME>> OpenSSH.Client~~~~0.0.1.0 Funcionalidad bajo demanda (FoD: Features on Demand)
<<WIM_PATH>> D:\sources\install.wim Archivo de imagen WIM/ESD
<<INDEX>> 1 Índice de imagen
<<MOUNT_DIR>> C:\mount Directorio de montaje
<<DRIVER_DIR>> D:\drivers Carpeta con INF de controladores
<<PACKAGE_PATH>> C:\Updates\kb5005565.cab Archivo de paquete de actualización
<<LANG_PACK>> C:\LP\ja-jp\lp.cab CAB de paquete de idioma
<<SOURCE_PATH>> D:\sources\sxs Ruta de origen (p. ej., NetFx3)
<<APPLY_DIR>> C:\ Destino de aplicación
<<SCRATCH_DIR>> C:\Temp\Scratch Carpeta de trabajo
<<LOG_PATH>> C:\Temp\dism.log Ruta del registro

Casi todos los comandos aceptan /ScratchDir:<<SCRATCH_DIR>> y /LogPath:<<LOG_PATH>>.


Paso 1: Seleccionar el destino (/Online o /Image)

Muchos comandos de DISM requieren especificar explícitamente el destino.

Opción Significado Ejemplo
/Online Sistema Windows en ejecución dism /Online /Cleanup-Image /CheckHealth
/Image:<<IMAGE_PATH>> Windows fuera de línea o imagen montada dism /Image:C:\mount /Add-Driver /Driver:D:\drivers /Recurse

Paso 2: Consultar funcionalidades (/Get-Features, /Get-FeatureInfo)

Descripción

Obtiene la lista de funcionalidades instalables y su estado (Enabled / Disabled / DisabledWithPayloadRemoved).

Opciones principales

Opción Significado Ejemplo
/Online Contra el SO activo dism /Online /Get-Features
/Image:<<IMAGE_PATH>> Contra una imagen fuera de línea dism /Image:C:\mount /Get-Features
/Get-Features Muestra el listado dism /Online /Get-Features /Format:Table
/Get-FeatureInfo Detalle de una funcionalidad dism /Online /Get-FeatureInfo /FeatureName:NetFx3
/FeatureName:<<FEATURE_NAME>> Nombre de la funcionalidad NetFx3
/Format:Table Salida tabular dism /Online /Get-Features /Format:Table

Ejemplos

# Listar todas las funcionalidades con su estado
dism /Online /Get-Features /Format:Table

# Ver el detalle de NetFx3
dism /Online /Get-FeatureInfo /FeatureName:NetFx3

El estado DisabledWithPayloadRemoved indica que faltan archivos de la funcionalidad y se requiere /Source.


Paso 3: Habilitar o deshabilitar funcionalidades (/Enable-Feature, /Disable-Feature)

Descripción

Activa o desactiva funcionalidades como .NET Framework 3.5 o SMB 1.0.

Opciones principales

Opción Significado Ejemplo
/Online SO activo dism /Online /Enable-Feature /FeatureName:NetFx3
/FeatureName:<<FEATURE_NAME>> Funcionalidad a gestionar NetFx3
/All Incluye dependencias
/Source:<<SOURCE_PATH>> Origen para payload eliminado dism /Online /Enable-Feature /FeatureName:NetFx3 /Source:D:\sources\sxs
/LimitAccess No usa Windows Update/WSUS
/Enable-Feature Habilitar dism /Online /Enable-Feature /FeatureName:SMB1Protocol
/Disable-Feature Deshabilitar dism /Online /Disable-Feature /FeatureName:SMB1Protocol
/LogPath:<<LOG_PATH>> Ruta del log

Ejemplos

# Habilitar .NET Framework 3.5 (NetFx3) con origen local (sin internet)
dism /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:<<SOURCE_PATH>> /LogPath:<<LOG_PATH>>

# Deshabilitar SMB1 para hardening
dism /Online /Disable-Feature /FeatureName:SMB1Protocol /LogPath:<<LOG_PATH>>

Paso 4: Consultar Capabilities (/Get-Capabilities, /Get-CapabilityInfo)

Descripción

Lista componentes FoD y su estado, por ejemplo RSAT, OpenSSH.Client, Language.Basic.

Opciones principales

Opción Significado Ejemplo
/Online SO activo dism /Online /Get-Capabilities
/Image:<<IMAGE_PATH>> Imagen fuera de línea dism /Image:C:\mount /Get-Capabilities
/Get-Capabilities Lista de capabilities dism /Online /Get-Capabilities /Format:Table
/Get-CapabilityInfo Detalle de una capability dism /Online /Get-CapabilityInfo /CapabilityName:OpenSSH.Client~~~~0.0.1.0
/Format:Table Salida tabular dism /Online /Get-Capabilities /Format:Table

Ejemplos

# Lista completa
dism /Online /Get-Capabilities /Format:Table

# Detalle de una capability concreta
dism /Online /Get-CapabilityInfo /CapabilityName:<<CAPABILITY_NAME>>

Las capabilities pueden agregarse desde Windows Update, WSUS o una ISO/compartido.


Paso 5: Agregar o quitar Capabilities (/Add-Capability, /Remove-Capability)

Descripción

Instala o elimina FoD como OpenSSH o herramientas RSAT.

Opciones principales

Opción Significado Ejemplo
/Online SO activo dism /Online /Add-Capability
/CapabilityName:<<CAPABILITY_NAME>> Capability objetivo OpenSSH.Client~~~~0.0.1.0
/Source:<<SOURCE_PATH>> ISO FoD o recurso compartido dism /Online /Add-Capability /CapabilityName:OpenSSH.Client~~~~0.0.1.0 /Source:D:\ /LimitAccess
/LimitAccess Solo usa el origen especificado
/LogPath:<<LOG_PATH>> Ruta del log

Ejemplos

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

# Quitar un RSAT innecesario
dism /Online /Remove-Capability /CapabilityName:<<CAPABILITY_NAME>> /LogPath:<<LOG_PATH>>

Paso 6: Reparación de imagen y Component Store (/Cleanup-Image)

Descripción

Detecta/corrige corrupción del WinSxS y optimiza espacio.

Opciones principales

Opción Significado Ejemplo
/Online SO activo dism /Online /Cleanup-Image /CheckHealth
/CheckHealth Comprobación rápida
/ScanHealth Examen detallado
/RestoreHealth Reparación dism /Online /Cleanup-Image /RestoreHealth
/Source:<<SOURCE_PATH>> Origen para reparación
/LimitAccess Sin Windows Update
/StartComponentCleanup Limpia actualizaciones antiguas
/ResetBase Fija la base (sin rollback)
/AnalyzeComponentStore Analiza tamaño del almacén

Ejemplos

# Comprobación rápida
dism /Online /Cleanup-Image /CheckHealth

# Escaneo detallado
dism /Online /Cleanup-Image /ScanHealth

# Reparar especificando origen
dism /Online /Cleanup-Image /RestoreHealth /Source:<<SOURCE_PATH>> /LimitAccess /LogPath:<<LOG_PATH>>

# Limpieza y fijación de base
dism /Online /Cleanup-Image /StartComponentCleanup /ResetBase /LogPath:<<LOG_PATH>>

Paso 7: Información de imágenes (/Get-ImageInfo)

Opciones principales

Opción Significado Ejemplo
/Get-ImageInfo Muestra info de WIM/ESD dism /Get-ImageInfo /ImageFile:install.wim
/ImageFile:<<WIM_PATH>> Archivo WIM objetivo
/Index:<<INDEX>> Índice objetivo
/LogPath:<<LOG_PATH>> Ruta del log

Ejemplo

# Ver ediciones e índices de install.wim
dism /Get-ImageInfo /ImageFile:<<WIM_PATH>> /LogPath:<<LOG_PATH>>

Paso 8: Montaje y desmontaje de imágenes fuera de línea

Opciones principales

Opción Significado Ejemplo
/Mount-Wim Monta un WIM
/WimFile:<<WIM_PATH>> WIM de origen
/Index:<<INDEX>> Índice a montar
/MountDir:<<MOUNT_DIR>> Carpeta de montaje
/ReadOnly Solo lectura
/Get-MountedWimInfo Ver montajes actuales
/Unmount-Wim Desmontar
/Commit Guardar cambios
/Discard Descartar cambios

Ejemplos

# Montar para edición
dism /Mount-Wim /WimFile:<<WIM_PATH>> /Index:<<INDEX>> /MountDir:<<MOUNT_DIR>>

# Estado de montajes
dism /Get-MountedWimInfo

# Guardar y desmontar
dism /Unmount-Wim /MountDir:<<MOUNT_DIR>> /Commit

Paso 9: Integración de controladores, paquetes e idiomas

Opciones principales

Opción Significado Ejemplo
/Online Contra el SO activo
/Image:<<MOUNT_DIR>> Contra imagen fuera de línea
/Add-Driver Agregar controladores
/Driver:<<DRIVER_DIR>> Carpeta con INF
/Recurse Incluye subcarpetas
/Add-Package Integrar paquete/idioma
/PackagePath:<<PACKAGE_PATH>> Ruta del paquete
/Set-AllIntl:ja-JP Establece configuración regional

Notas:

  • /Add-Driver es solo para imágenes fuera de línea.
  • /Add-Package y /Set-AllIntl funcionan en modo online y offline.

Ejemplos

# Integrar controladores
dism /Image:<<MOUNT_DIR>> /Add-Driver /Driver:<<DRIVER_DIR>> /Recurse

# Integrar actualización
dism /Image:<<MOUNT_DIR>> /Add-Package /PackagePath:<<PACKAGE_PATH>>

# Agregar paquete de idioma y fijar locale
dism /Image:<<MOUNT_DIR>> /Add-Package /PackagePath:<<LANG_PACK>>
dism /Image:<<MOUNT_DIR>> /Set-AllIntl:ja-JP

Paso 10: Capturar, exportar y aplicar imágenes

Opciones principales

Opción Significado Ejemplo
/Capture-Image Captura una carpeta a WIM
/ImageFile:<<WIM_PATH>> WIM de salida
/CaptureDir:<<APPLY_DIR>> Carpeta origen
/Name:"<nombre>" Nombre de la imagen
/Export-Image Reexporta/comprime un WIM
/Apply-Image Aplica un WIM
/Compress:max Compresión máxima
/ApplyDir:<<APPLY_DIR>> Destino de aplicación

Ejemplos

# Capturar configuración actual
dism /Capture-Image /ImageFile:D:\Custom.wim /CaptureDir:<<APPLY_DIR>> /Name:"Custom Image"

# Reexportar con compresión
dism /Export-Image /SourceImageFile:<<WIM_PATH>> /SourceIndex:<<INDEX>> /DestinationImageFile:D:\install_compressed.wim /Compress:max

# Aplicar imagen
dism /Apply-Image /ImageFile:<<WIM_PATH>> /Index:<<INDEX>> /ApplyDir:<<APPLY_DIR>>

Paso 11: Equivalentes en PowerShell

Mapa rápido

Área DISM PowerShell Objetivo
Consultar funcionalidades /Get-Features, /Get-FeatureInfo Get-WindowsOptionalFeature Listado/detalle
Habilitar/deshabilitar funcionalidades /Enable-Feature, /Disable-Feature Enable-WindowsOptionalFeature, Disable-WindowsOptionalFeature Activar/desactivar
Consultar capabilities /Get-Capabilities, /Get-CapabilityInfo Get-WindowsCapability Listado/detalle
Agregar/quitar capabilities /Add-Capability, /Remove-Capability Add-WindowsCapability, Remove-WindowsCapability Gestionar FoD
Consultar/agregar paquetes /Get-Packages, /Add-Package Get-WindowsPackage, Add-WindowsPackage Integrar updates/idiomas
Controladores: listar/agregar/quitar /Get-Drivers, /Add-Driver, /Remove-Driver Get-WindowsDriver, Add-WindowsDriver, Remove-WindowsDriver Principalmente offline
Info/montaje de imágenes /Get-ImageInfo, /Mount-Wim, /Unmount-Wim Get-WindowsImage, Mount-WindowsImage, Dismount-WindowsImage Gestión de WIM

11.1 Funcionalidades (Features)

Get-WindowsOptionalFeature

Opción Significado Ejemplo
-Online SO activo Get-WindowsOptionalFeature -Online -FeatureName <<FEATURE_NAME>>
-Path <<IMAGE_PATH>> Imagen offline Get-WindowsOptionalFeature -Path <<IMAGE_PATH>>
-FeatureName <<FEATURE_NAME>> Funcionalidad concreta -FeatureName NetFx3
# Todas las funcionalidades (online)
Get-WindowsOptionalFeature -Online

# Detalle específico (offline)
Get-WindowsOptionalFeature -Path <<IMAGE_PATH>> -FeatureName <<FEATURE_NAME>>

Enable-/Disable-WindowsOptionalFeature

Opción Significado Ejemplo
-Online / -Path <<IMAGE_PATH>> Selección de destino Enable-WindowsOptionalFeature -Online
-FeatureName <<FEATURE_NAME>> Nombre de funcionalidad -FeatureName NetFx3
-All Incluye dependencias -All
-Source <<SOURCE_PATH>> Origen del payload -Source <<SOURCE_PATH>>
# Habilitar (NetFx3 con origen)
Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -All -Source <<SOURCE_PATH>>

# Deshabilitar (SMB1)
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

11.2 Capabilities

Get-WindowsCapability

Opción Significado Ejemplo
-Online SO activo Get-WindowsCapability -Online
-Name <<CAPABILITY_NAME>> Soporta comodines Get-WindowsCapability -Online -Name OpenSSH.*
-Path <<IMAGE_PATH>> Imagen offline Get-WindowsCapability -Path <<IMAGE_PATH>>
# Listado (online)
Get-WindowsCapability -Online

# Solo una capability
Get-WindowsCapability -Online -Name <<CAPABILITY_NAME>>

Add-/Remove-WindowsCapability

Opción Significado Ejemplo
-Online / -Path <<IMAGE_PATH>> Destino Add-WindowsCapability -Online
-Name <<CAPABILITY_NAME>> Capability -Name OpenSSH.Client~~~~0.0.1.0
-Source <<SOURCE_PATH>> Origen FoD -Source <<SOURCE_PATH>>
# Agregar (online, con origen si es necesario)
Add-WindowsCapability -Online -Name <<CAPABILITY_NAME>>

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

11.3 Paquetes (actualizaciones e idiomas)

Get-WindowsPackage

Opción Significado Ejemplo
-Online / -Path <<IMAGE_PATH>> Destino Get-WindowsPackage -Online
-PackagePath <<PACKAGE_PATH>> Info del paquete Get-WindowsPackage -Online -PackagePath <<PACKAGE_PATH>>
# Listar paquetes instalados (online)
Get-WindowsPackage -Online

Add-WindowsPackage

Opción Significado Ejemplo
-Online / -Path <<IMAGE_PATH>> Destino Add-WindowsPackage -Online -PackagePath <<PACKAGE_PATH>>
-PackagePath <<PACKAGE_PATH>> Preferible .cab (también .msu)
# Integrar actualización (online)
Add-WindowsPackage -Online -PackagePath <<PACKAGE_PATH>>

# Paquete de idioma (offline)
Add-WindowsPackage -Path <<IMAGE_PATH>> -PackagePath <<LANG_PACK>>

11.4 Controladores

Get-WindowsDriver

Opción Significado Ejemplo
-Online / -Path <<IMAGE_PATH>> Destino Get-WindowsDriver -Path <<IMAGE_PATH>>
-All Muestra todos los controladores -All
# Listar controladores de una imagen offline
Get-WindowsDriver -Path <<IMAGE_PATH>> -All

Add-/Remove-WindowsDriver

Opción Significado Ejemplo
-Path <<IMAGE_PATH>> Imagen objetivo Add-WindowsDriver -Path <<IMAGE_PATH>> -Driver <<DRIVER_DIR>> -Recurse
-Driver <<DRIVER_DIR>> Carpeta con INF
-Recurse Incluye subcarpetas
-Driver <<oem*.inf>> (Remove) INF a eliminar Remove-WindowsDriver -Path <<IMAGE_PATH>> -Driver oem1.inf
# Agregar (offline)
Add-WindowsDriver -Path <<IMAGE_PATH>> -Driver <<DRIVER_DIR>> -Recurse

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

Importante: Add-/Remove-WindowsDriver no ofrecen -Online; su uso práctico es offline.


11.5 Información y montaje de imágenes

Get-WindowsImage

Opción Significado Ejemplo
-ImagePath <<WIM_PATH>> Ruta de WIM/ESD Get-WindowsImage -ImagePath <<WIM_PATH>>
-Index <<INDEX>> Índice concreto -Index <<INDEX>>
# Todos los índices de install.wim
Get-WindowsImage -ImagePath <<WIM_PATH>>

Mount-/Dismount-WindowsImage

Opción Significado
-ImagePath <<WIM_PATH>> WIM de entrada
-Index <<INDEX>> Índice a montar
-Path <<MOUNT_DIR>> Carpeta de montaje
-ReadOnly Solo lectura
-ScratchDirectory <<SCRATCH_DIR>> Carpeta de trabajo
-Save (Dismount) Guardar cambios
-Discard (Dismount) Descartar cambios
# Montar
Mount-WindowsImage -ImagePath <<WIM_PATH>> -Index <<INDEX>> -Path <<MOUNT_DIR>>

# Guardar y desmontar
Dismount-WindowsImage -Path <<MOUNT_DIR>> -Save

Conclusión

  • DISM: gestión de bajo nivel de componentes del SO, WIM, actualizaciones y controladores.
  • PowerShell (API de DISM): mismas capacidades con foco en scripting y automatización.
  • Capabilities (FoD): funcionalidades bajo demanda como OpenSSH, RSAT y paquetes de idiomas.