DISM.exe /Get-ImageInfo 作用:离线读取 WIM/SWM/ESD 映像元数据、索引、版本、版本标识、内置功能清单,不挂载映像即可查询基础信息;搭配 /Index 可进一步读取映像内部详细信息 适用:Windows ADK、系统部署、WIM 运维、批量定制镜像查看 WIM 文件中的映像信息和功能列表,要将多个功能应用于 WIM 文件,
dism /Get-ImageInfo 完整解构
命令全称:
DISM.exe /Get-ImageInfo作用:离线读取 WIM/SWM/ESD 映像元数据、索引、版本、版本标识、内置功能清单,不挂载映像即可查询基础信息;搭配/Index可进一步读取映像内部详细信息 适用:Windows ADK、系统部署、WIM 运维、批量定制镜像
一、底层原理
DISM(Deployment Image Servicing and Management,部署映像服务和管理),dism /Get-ImageInfo 属于离线映像元数据解析模式,不会将 WIM 挂载到目录、不启动离线服务栈,仅解析 WIM 文件头部 + XML 元数据。
- WIM 底层结构:WIM 是基于单实例存储 (SIS)的归档文件,文件头部包含全局元数据 + 多个映像索引 (Index),每个索引自带
[IMAGE_METADATA](版本、SKU、语言、默认启用的 Windows 功能)。 - 执行逻辑:
- DISM 调用 WIMGAPI(Windows Imaging API),直接读取 wim 头部、映像目录元数据
- 不解压文件、不落地写入临时系统目录,仅内存解析元数据
- 当附加
/Index:N参数时,会解析该索引内部的offline Servicing Metadata,读取可选功能(Features)、包清单
- 和
/Mount-Wim的本质区别:/Get-ImageInfo:只读元数据,离线轻量解析,无需占用挂载目录,不需要管理员(部分版本读取本地 wim 需要管理员)/Mount-Wim:把 wim 映射到 NTFS 目录,启动完整离线 servicing 栈,可以增删驱动、包、功能
二、依赖文件
DISM.exe 本体路径:
C:\Windows\System32\Dism.exe
- 核心 API 库(必须)
wimgapi.dll:WIM 核心解析库,负责 WIM/ESD/SWM 文件读写、元数据提取(最核心依赖)dismcore.dll:DISM 核心业务逻辑,封装 wimgapi、包管理、功能解析dismprov.dll:提供 Windows 功能、组件清单解析提供程序api-ms-win-core-*系列 API 集:基础文件、内存、字符串 API
- 辅助依赖(读取 Feature 功能列表时加载)
servicingstack.dll:离线组件库解析(CBS 离线栈)cmi.dll、cmiprovider.dll:组件清单解析
- 配套文件(非程序依赖,是 WIM 内部自带)
- WIM 内部元数据:
\$WIM\Metadata、组件清单CBS Manifest(只有带/Index才读取)
- WIM 内部元数据:
- 32/64 隔离:SysWOW64 存在独立 32 位
dism.exe / wimgapi.dll,只能解析 32 位相关映像,解析 64 位 WIM 容易异常
三、依赖关系(调用链路)
完整正向调用链路
dism.exe (控制台入口)
↓
dismcore.dll 解析命令行参数(识别 /Get-ImageInfo /Index)
↓
wimgapi.dll → 打开目标 *.wim / *.esd / *.swm
↓
读取WIM头部 + 映像索引元数据(名称、版本、SKU、大小)
↓
如果带 /Index:N:
→ dismprov.dll + servicingstack.dll
→ 读取该索引内CBS组件清单、可选Windows功能列表
↓
格式化文本输出到控制台
依赖关系总结
dism.exe强依赖dismcore.dll+wimgapi.dll,缺少 wimgapi.dll 该命令直接报错无法读取 WIM- 单纯不带 / Index 的基础信息查询,不依赖 CBS 离线栈;只有查询映像内功能清单时才加载 servicingstack 相关组件
- 该命令不依赖 WMI、不依赖 rpcss、不依赖 windows update 服务,纯本地文件解析
四、逻辑链路(正常链路 + 故障链路)
✅ 正常链路示例命令:
# 基础:列出WIM所有索引概要信息
dism /Get-ImageInfo /ImageFile:D:\sources\install.wim
# 进阶:读取索引1内部详细信息 + 功能清单
dism /Get-ImageInfo /ImageFile:D:\sources\install.wim /Index:1
✅ 正常流程:文件可访问 → wimgapi 解析成功 → 输出映像版本、SKU、大小、语言、功能列表 ❌ 典型故障链路:
- WIM 文件损坏 → wimgapi 返回 ERROR_BAD_FORMAT → 提示无法识别映像
- 文件权限不足 → CreateFile 拒绝访问 → 读取失败
- ESD 加密压缩映像、旧版 wimgapi 不支持 → 无法解析元数据
- 缺少 servicingstack.dll → 基础信息能读出,但功能列表无法展示
- SWM 分卷缺失后续分片 → 元数据读取失败
五、配套链(配套命令、工具、注册表、组件)
| 配套项目 | 说明 |
|---|---|
| wimlib(第三方开源替代) | 跨平台读取 WIM 元数据,功能对标 wimgapi |
| dism /Mount-Wim /Unmount-Wim | WIM 挂载 / 卸载配套命令 |
| dism /Get-WimInfo | 旧别名,等价 /Get-ImageInfo(部分文档混用) |
| Get-WindowsImage (PowerShell) | Dism 模块 PowerShell 等价命令(Dism.psd1) |
| ADK | 部署工具包,自带独立版本 dism/wimgapi,可在 PE 环境使用 |
| CBS 组件库 | 映像内部可选功能清单的数据源 |
| oscdimg | ISO 打包配套工具 |
| wimlib-imagex | ImageX(老工具,DISM 替代 ImageX) |
PowerShell 等价原生命令:
Get-WindowsImage -ImagePath D:\sources\install.wim
Get-WindowsImage -ImagePath D:\sources\install.wim -Index 1
六、边界(限制、坑点、约束)
- 文件格式支持边界 ✅ 支持:
.wim、.swm(分卷 WIM)、.esd(高压缩电子下载映像,Win10+ wimgapi 才支持) ❌ 不支持:VHD/VHDX、ISO 原始文件(必须先提取里面的 install.wim) - /Index 参数边界
- 不加
/Index:仅输出索引概要,不会展示功能清单、组件包 - 增加
/Index:N:才会加载 CBS 栈,输出映像内 Windows 可选功能清单
- 不加
- PE 环境边界 WinPE 内置精简版 DISM/wimgapi,部分老 PE 版本无法解析新版 ESD 映像
- 权限边界 读取本地磁盘普通 wim 多数不需要管理员;读取系统目录、只读保护分区内 WIM 需要管理员权限
- 版本兼容边界 低版本系统自带的 wimgapi 无法解析新版 Win11 生成的 WIM/ESD(元数据版本升级),需要用新版 ADK 的独立 DISM
- 只读边界
/Get-ImageInfo仅查询,不能修改 WIM 内任何内容;修改映像需要挂载后操作 - 大文件性能边界 超大 WIM(几十 GB)元数据解析很快,因为只读取头部,不会遍历全部文件内容
七、补充常用扩展命令 & 报错速查
# 导出信息到文本
dism /Get-ImageInfo /ImageFile:D:\sources\install.wim /Index:1 > wim_info.txt
常见报错:
0x8007000D:WIM 文件损坏、格式无效0x80070005:权限不足无法读取映像文件0x800f0805:索引不存在 / 无法读取组件清单(servicing 栈缺失)
目录
- dism /Mount-Wim/Unmount-Wim /Cleanup-Wim 完整解构
- DISM PowerShell 模块(Dism.psd1)全套命令对照表
- WIM/ESD/SWM/VHD 镜像运维标准 SOP
前置说明: 整套能力底层均依赖 wimgapi.dll + dismcore.dll + CBS 离线服务栈;PE、ADK 独立 DISM 和系统内置 DISM 版本存在能力差异;ESD 为高压缩只读映像,部分操作受限。
1 dism /Mount-Wim/Unmount-Wim /Cleanup-Wim 完整解构
1.1 底层原理
/Mount-Wim:将 WIM 索引离线挂载到本地 NTFS 空目录,基于 WIM 单实例存储 (SIS),不会完整解压所有文件,内核通过文件筛选驱动映射文件,启动CBS 离线 servicing 栈,可修改驱动、包、可选功能、注册表。 /Unmount-Wim:卸载已挂载映像,二选一模式:/Commit(保存修改写入原 WIM)、/Discard(丢弃所有变更)。 /Cleanup-Wim:清理残留挂载会话、无效 WIM 挂载点、系统中缓存的 SIS 资源、孤立的脱机 servicing 状态,处理异常崩溃遗留的锁、无法删除的挂载目录。
完整调用链路
dism.exe
↓
dismcore.dll 解析参数(Mount/Unmount/Cleanup)
↓
wimgapi.dll 打开WIM文件、校验索引、创建SIS映射
↓
启动离线CBS栈(servicingstack.dll / cmi.dll)
↓
文件系统筛选驱动(wimfltr.sys)把WIM内文件映射到本地挂载目录
↓
Unmount:提交/丢弃变更,解除wimfltr映射,释放句柄
↓
Cleanup-Wim:枚举系统WIM挂载会话,清理残留句柄、缓存
核心依赖文件
| 文件 | 作用 |
|---|---|
| dismcore.dll | DISM 核心逻辑、参数调度 |
| wimgapi.dll | WIM 读写、索引、SIS 管理核心 API |
| wimfltr.sys | WIM 文件系统筛选驱动(挂载核心内核组件) |
| servicingstack.dll | 离线 CBS 组件 / 包管理 |
| cmi.dll / cmiprovider.dll | 组件清单解析 |
| api-ms-win-core-* | 基础系统 API 集 |
依赖关系边界
- wimfltr.sys 是挂载必备,PE 精简镜像若缺失该驱动,Mount-Wim 直接失败;
- ESD 映像默认只读,可以 Mount 但不能 Commit 提交修改;
- SWM 分卷 WIM 挂载时需要所有分片文件齐全;
- 挂载目录必须为空、NTFS 分区,不能是压缩 / 加密目录。
1.2 逻辑链路(正常 + 故障链路)
✅ 标准完整流程
dism /Mount-Wim /WimFile:D:\install.wim /Index:1 /MountDir:D:\mount
→ 修改离线映像(添加驱动、启用功能、替换文件)
→ dism /Unmount-Wim /MountDir:D:\mount /Commit
✅ 丢弃修改
dism /Unmount-Wim /MountDir:D:\mount /Discard
✅ 清理异常残留(挂载崩溃、目录被占用无法卸载)
dism /Cleanup-Wim
❌ 典型故障链路
- wimfltr 未加载 → 挂载失败,提示缺少筛选驱动
- 挂载目录存在文件 / 权限不足 → 0x80070005 / 0x8007000D
- 进程占用挂载目录(资源管理器、编辑器打开 mount 内文件)→ Unmount 提交失败
- ESD 执行 Commit → 报错,ESD 不支持写入修改
- 异常断电崩溃 → 挂载会话残留,目录无法删除,必须执行 Cleanup-Wim
1.3 配套链
- 配套查询:
dism /Get-MountedWimInfo查询当前已挂载映像 - PowerShell 等价模块:Dism.psd1 的
Mount-WindowsImage / Dismount-WindowsImage / Remove-WindowsImage - ADK 独立 DISM:部署服务器批量镜像制作
- 配套工具:imagex(旧版,已被 DISM 替代)、wimlib
- 配套命令:
dism /Add-Driver /Add-Package /Enable-Feature(挂载后修改映像)
1.4 边界约束(重点坑)
- 挂载数量上限:系统默认并发挂载会话有限,大量并行挂载会直接报错;
- 不支持 FAT32/exFAT 挂载目录,强制要求 NTFS;
- 系统正在使用的文件无法在离线映像内直接替换(离线模式本身不影响正在运行的 OS);
/Cleanup-Wim不会主动删除用户自己创建的挂载目录,只清理系统登记的挂载会话与 SIS 缓存;- 新版 Win11 部分环境 wimfltr 驱动有变更,老版本 ADK 无法挂载新版 WIM;
- 分卷 SWM 挂载时,修改 Commit 后会重新生成分片,原有 SWM 失效。
1.5 常用示例
# 挂载
dism /Mount-Wim /WimFile:D:\sources\install.wim /Index:1 /MountDir:D:\mount
# 提交保存并卸载
dism /Unmount-Wim /MountDir:D:\mount /Commit
# 丢弃修改卸载
dism /Unmount-Wim /MountDir:D:\mount /Discard
# 清理所有残留WIM会话
dism /Cleanup-Wim
# 查询已挂载
dism /Get-MountedWimInfo
2 DISM PowerShell 模块(Dism.psd1)全套命令对照表
模块名称:Dism.psd1,内置在 Windows/ADK,需要管理员,底层封装 wimgapi,推荐生产脚本优先使用 PS 命令,比 dism.exe 更容易自动化捕获返回对象 导入模块:
Import-Module Dism
| PowerShell Cmdlet | 等价 DISM 命令 | 核心功能 |
|---|---|---|
| Get-WindowsImage | dism /Get-ImageInfo | 获取 WIM/ESD/SWM 映像索引概要信息 |
| Get-WindowsImageContent | dism /Get-WimInfo /Index:N | 列出映像内所有文件路径清单 |
| Mount-WindowsImage | dism /Mount-Wim | 挂载 WIM 索引到本地目录 |
| Dismount-WindowsImage | dism /Unmount-Wim | 卸载映像(Commit/Discard) |
| Remove-WindowsImage | dism /Delete-Wim | 删除 WIM 内某个索引 |
| Export-WindowsImage | dism /Export-Image | 导出 / 压缩 / 拆分 WIM,WIM→ESD 转换 |
| Split-WindowsImage | dism /Split-Image | 将大 WIM 拆分为 SWM 分卷 |
| Add-WindowsDriver | dism /Add-Driver | 向离线映像注入驱动 |
| Remove-WindowsDriver | dism /Remove-Driver | 删除离线映像内驱动 |
| Get-WindowsDriver | dism /Get-Drivers | 查询离线映像内置驱动 |
| Add-WindowsPackage | dism /Add-Package | 注入 MSU/CAB 更新包 |
| Remove-WindowsPackage | dism /Remove-Package | 删除离线更新包 |
| Get-WindowsPackage | dism /Get-Packages | 查询映像内安装包 |
| Enable-WindowsOptionalFeature | dism /Enable-Feature | 开启系统可选功能(.NET3.5 等) |
| Disable-WindowsOptionalFeature | dism /Disable-Feature | 关闭可选功能 |
| Get-WindowsOptionalFeature | dism /Get-Features | 查询可选功能状态 |
| Repair-WindowsImage | dism /Online /Cleanup-Image | 在线修复当前运行系统(不是离线 WIM) |
| Save-WindowsImage | dism /Capture-Image | 捕获当前系统分区生成新 WIM |
| Get-WindowsMountedImage | dism /Get-MountedWimInfo | 查询已挂载映像 |
| Clear-WindowsMountedImage | dism /Cleanup-Wim | 清理残留挂载会话缓存 |
简短示例(PS 挂载 + 启用功能)
Import-Module Dism
Mount-WindowsImage -ImagePath D:\install.wim -Index 1 -Path D:\mount
Enable-WindowsOptionalFeature -Path D:\mount -FeatureName NetFx3 -All
Dismount-WindowsImage -Path D:\mount -Save
重要边界
- Repair-WindowsImage 是在线系统修复,不能用于离线 WIM;
- Export-WindowsImage 可以实现 WIM 转 ESD(高压缩);
- 该模块在精简 PE 中可能缺失,只能回退 dism.exe;
- PowerShell 对象输出便于批量巡检、导出报表,适合域自动化脚本。
3 WIM/ESD/SWM/VHD 镜像运维标准 SOP
适用场景:装机镜像定制、批量母盘制作、离线更新注入、镜像归档、故障修复 前置区分 4 种格式核心特性 | 格式 | 可读写 | 挂载修改 | 典型用途 | |---|---|---|---| | WIM | ✅ | ✅ | 通用部署镜像,可多索引 | | ESD | ❌只读 | ✅挂载但不能 Commit | 微软官方下载高压缩镜像 | | SWM | ✅ | ✅ | 分卷 WIM,适合 FAT32U 盘(单文件 4G 限制) | | VHD/VHDX | ✅ | ✅(Attach) | 虚拟磁盘,可直接 Hyper-V 启动 |
SOP 总流程
Step1 镜像信息采集(基线核验)
- 校验文件哈希,确认镜像未损坏
- 读取索引、版本、SKU、内置包、可选功能
Get-WindowsImage -ImagePath D:\install.wim Get-WindowsImage -ImagePath D:\install.esd -Index 1 - 确认是否为 ESD 只读镜像(提前规避 Commit 报错)
Step2 镜像修改准备
- 创建空 NTFS 挂载目录
- 清理历史残留挂载会话
Clear-WindowsMountedImage - 挂载映像
Mount-WindowsImage -ImagePath D:\install.wim -Index 1 -Path D:\mount
Step3 离线定制(按需执行)
- 注入驱动:
Add-WindowsDriver - 注入累积更新 CAB/MSU:
Add-WindowsPackage - 开启可选功能:
Enable-WindowsOptionalFeature - 修改离线注册表(直接修改 mount 目录下
\Windows\System32\config\SOFTWARE)
⚠️ ESD:本步骤只能查看,不能保存修改
Step4 卸载 & 保存镜像
- 确认无进程占用 mount 目录
- 提交或丢弃
Dismount-WindowsImage -Path D:\mount -Save - 可选:导出压缩 / 转 ESD / 拆分 SWM
# WIM转ESD高压缩 Export-WindowsImage -SourceImagePath D:\install.wim -SourceIndex 1 -DestinationImagePath D:\install.esd -Compression High # 拆分4G单文件SWM Split-WindowsImage -ImagePath D:\install.wim -DestinationPath D:\swm\install.swm -FileSize 4096
Step5 VHD/VHDX 分支流程(和 WIM 独立)
VHD 不是 WIM 体系,使用 Diskpart+Dism 配合:
- 创建 VHD → 挂载 VHD
- 把 WIM 应用写入 VHD 分区
dism /Apply-Image - 配置 BCD 引导,可直接 Hyper-V 启动
# 示例:应用WIM到VHD分区
dism /Apply-Image /ImageFile:D:\install.wim /Index:1 /ApplyDir:V:\
Step6 校验 & 归档
- 重新读取镜像信息,验证版本、包是否注入成功
- 生成镜像清单报表
- 归档原始镜像 + 定制后镜像,记录变更日志
- 测试部署验证(虚拟机测试装机)
Step7 异常处理 SOP
- 挂载失败 → 检查 wimfltr 驱动、目录权限、是否 NTFS
- Unmount 占用报错 → 排查资源管理器 / 编辑器句柄,必要时重启后 cleanup
- ESD 提交报错 → 改用 Export 导出为新 WIM 再修改
- 镜像损坏 → 使用原始介质重新获取,不要强行修复损坏 WIM
运维禁忌清单
❌ 不要直接在线系统下随意离线注入包 ❌ ESD 镜像不要尝试 Commit 写入 ❌ 不要在压缩 / 加密 NTFS 目录挂载 WIM ❌ 不要并发大量挂载会话 ❌ SWM 修改后原有分片失效,必须使用新生成的分卷
配套巡检脚本扩展点(可直接产出)
- 批量遍历目录下所有 wim/esd,自动输出版本清单
- 自动检测镜像是否损坏、索引有效性
- VHD 批量创建 + WIM 自动注入一键脚本
目录
- dism /Apply-Image/Capture-Image /Export-Image 完整解构
- WIM 镜像自动化打包一键工程脚本(批量装机流水线可用)
- DISM 离线注入驱动 / 更新包排错 SOP
前置统一说明 三条命令底层均依赖
wimgapi.dll+dismcore.dll,Capture/Export属于 WIM 归档处理,Apply是将 WIM 内容落地写入分区;不依赖 wimfltr.sys 挂载驱动(和 Mount-Wim 区分开),常用于装机部署、母盘抓取、镜像格式转换。
1 dism /Apply-Image/Capture-Image /Export-Image 完整解构
1.1 dism /Capture-Image(捕获分区 → 生成 WIM)
✅ 作用:抓取正在运行或离线的分区文件,基于单实例存储 SIS 打包生成 WIM 映像,常用于母盘封装。
等价 PS:
Save-WindowsImage
底层原理
遍历目标分区文件,通过 wimgapi 做 SIS 去重,写入 WIM 流,生成映像元数据;不会自动执行系统封装(sysprep),仅文件打包。
⚠️ 重点:单纯 Capture 出来的 wim 直接部署会 SID 冲突,生产必须先 sysprep generalize。
调用链路
dism.exe → dismcore.dll → wimgapi.dll → 遍历源分区文件 → SIS压缩去重 → 写入目标WIM
依赖文件
- dismcore.dll、wimgapi.dll
- api-ms-win-file-* 基础文件 API
- 若开启压缩:内置 LZMS/LZX 压缩引擎(wimgapi 内部实现)
边界 & 坑
- 默认不捕获分区空闲块、页面文件、休眠文件、系统临时目录;
- 支持压缩级别:
/Compress:None /Fast /Maximum - 不能直接捕获正在被独占锁定的系统文件(在线捕获需要卷快照 VSS 辅助)
- ESD 不能直接 Capture 生成,需要 Capture 后 Export 转 ESD
示例
dism /Capture-Image /ImageFile:D:\母盘.wim /CaptureDir:C:\ /Name:"Win11 企业母盘" /Compress:Maximum
1.2 dism /Apply-Image(把 WIM 释放到分区)
✅ 作用:将 WIM 索引内所有文件释放写入目标分区,装机核心步骤(PE 环境高频使用)
等价 PS:
Expand-WindowsImage
底层原理
wimgapi 读取 WIM 流,解压还原文件到目标 NTFS 分区,还原文件安全描述符、权限、目录结构;仅释放文件,不会自动生成 BCD 引导,文件落地后需要单独 bootrec/bcdboot。
调用链路
dism.exe → dismcore.dll → wimgapi.dll → 读取WIM → 解压 → 写入目标分区
依赖文件
dismcore.dll、wimgapi.dll;PE 环境必须具备这两个文件
边界 & 坑
- 目标分区必须预先格式化 NTFS;
- 不自动处理引导扇区、BCD;
- 支持 ESD/SWM 源直接 Apply;
- 目标分区空间必须充足(大于 wim 解压后实际占用)
示例
dism /Apply-Image /ImageFile:D:\install.wim /Index:1 /ApplyDir:W:\
1.3 dism /Export-Image(导出 / 转格式 / 压缩 / 拆分索引)
✅ 作用:从源 WIM/ESD 提取索引,输出新映像;核心用途:WIM↔ESD 转换、精简镜像、合并索引、修改压缩级别
等价 PS:
Export-WindowsImage
底层原理
wimgapi 读取源映像指定索引,重新 SIS 去重、重新压缩,输出全新 wim/esd,不修改原始文件。
调用链路
dism.exe → dismcore.dll → wimgapi.dll → 读取源索引 → 重新SIS处理 → 输出新映像
边界 & 坑
- ESD 本质是高压缩只读映像,只能 Export 生成,不能直接挂载 commit 修改;
- 可跨格式转换 WIM → ESD / ESD → WIM
- 可以提取单索引,剔除多余版本,精简镜像体积
- SWM 分卷不支持直接 Export,需要先合并
示例
# WIM转高压缩ESD
dism /Export-Image /SourceImageFile:D:\install.wim /SourceIndex:1 /DestinationImageFile:D:\install.esd /Compress:Recovery
# 提取索引生成精简wim
dism /Export-Image /SourceImageFile:D:\install.wim /SourceIndex:1 /DestinationImageFile:D:\lite.wim /Compress:Maximum
三者汇总配套链
| 命令 | 是否需要 wimfltr | 是否修改原始 wim | 典型环境 |
|---|---|---|---|
| Capture-Image | ❌ | 新建文件,不改动源盘 | 母盘封装、PE |
| Apply-Image | ❌ | 写入目标分区,不改动 wim | PE 装机流水线 |
| Export-Image | ❌ | 新建输出文件,源文件不变 | 镜像格式转换、精简 |
配套前置 / 后置工具:sysprep(封装)、bcdboot、bootrec、diskpart(分区预处理)、VSS 快照
2 WIM 镜像自动化打包一键工程脚本(批量装机流水线)
特性:
- 自动 Sysprep 通用化 → VSS 快照捕获系统分区 → 输出高压缩 WIM
- 自动生成镜像信息清单
- 可直接在母机(离线封装环境)执行
- 输出日志,适合流水线 CI 调用 ⚠️ 重要:母机提前完成驱动、预装软件、配置优化,关闭杀毒 / 安全软件再运行
<#
WIM母盘自动打包脚本
功能:Sysprep generalize + VSS快照捕获C盘生成WIM,输出镜像信息
#>
#Requires -RunAsAdministrator
$WimOutputPath = "D:\output\win11_master.wim"
$LogPath = "D:\output\build_wim.log"
$TempSnapshotDir = "C:\_wim_snap"
$ImageName = "Win11 Enterprise Master"
$ImageDesc = "批量装机母盘,已sysprep通用化"
Start-Transcript -Path $LogPath
# 1. 创建输出目录
New-Item -Path (Split-Path $WimOutputPath) -ItemType Directory -Force | Out-Null
# 2. Sysprep 通用化(关键,消除SID)
Write-Host "===== 执行Sysprep通用化 ====="
& $env:SystemRoot\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /quiet
# 👉 注意:sysprep执行后系统会自动关机,如果你想继续脚本自动捕获,需要VSS快照方案(下面快照捕获分支)
<#
【可选:不重启直接快照捕获(适合离线母盘,生产推荐)】
# VSS快照捕获C盘,规避文件锁定
wmic shadowcopy create volume=C:\
# 获取快照路径,然后dism capture快照路径
# 线上生产环境一般采用:sysprep后重启进PE再Capture,最稳妥
#>
# ========== PE环境下的标准捕获代码(流水线主力)==========
<#
dism /Capture-Image /ImageFile:$WimOutputPath /CaptureDir:C:\ /Name:$ImageName /Description:$ImageDesc /Compress:Maximum
# 导出镜像信息清单
dism /Get-ImageInfo /ImageFile:$WimOutputPath > "$(Split-Path $WimOutputPath)\wim_info.txt"
# 计算哈希
Get-FileHash $WimOutputPath -Algorithm SHA256 > "$(Split-Path $WimOutputPath)\wim_sha256.txt"
#>
Write-Host "===== 打包完成,输出文件:$WimOutputPath ====="
Stop-Transcript
PE 端配套一键部署脚本(流水线装机)
# PE环境,diskpart预处理分区后,自动apply wim + 修复引导
$wimFile = "D:\output\win11_master.wim"
$targetDrive = "W:"
dism /Apply-Image /ImageFile:$wimFile /Index:1 /ApplyDir:$targetDrive
bcdboot $targetDrive\Windows /s S: /f UEFI
流水线落地建议
- 母机固化基础环境 → 执行 sysprep → 重启进入 PE
- PE 内执行 Capture 脚本生成 wim
- 自动 Export 转 ESD(可选,缩小 U 盘体积)
- 自动输出哈希、版本清单入库
- U 盘 / 网络 PXE 分发
3 DISM 离线注入驱动 / 更新包排错 SOP
适用场景:Mount-Wim 挂载离线映像后 Add-WindowsDriver / Add-WindowsPackage 报错
前置基础信息
- 注入驱动:
Add-WindowsDriver对应 dism /Add-Driver - 注入更新包:
Add-WindowsPackage对应 dism /Add-Package(支持 CAB/MSU)
Step1 前置校验(优先执行)
- 校验 wim 挂载状态
Get-WindowsMountedImage
- 确认映像类型:ESD 只读映像不能提交修改,必须先 Export 导出成 WIM 再注入
- 校验挂载目录:NTFS、无压缩、无加密、目录为空、无资源管理器占用
- 校验文件完整性:wim 无损坏,dism /Get-ImageInfo 可正常读取索引
- 校验驱动 / 包文件:
- 驱动:必须有 inf 文件,不要直接 exe
- 更新包:CAB 标准包;MSU 需要离线适配对应系统版本
Step2 分类报错快速定位
| 报错码 | 根因 | 处理方案 |
|---|---|---|
| 0x800f081e | 包不适用当前映像版本 | 更新包版本和系统不匹配,更换对应版本 CAB |
| 0x80070005 | 权限不足 / 文件占用 | 管理员运行,关闭所有打开 mount 目录的程序 |
| 0x800f0823 | CBS 组件清单损坏 | 源 wim 本身组件库损坏,更换原始干净 wim |
| 0x8007000D | INF 无效、驱动包损坏 | 重新提取原厂驱动 inf |
| 0x800f0805 | 映像版本不支持该功能 / 包 | 核对系统 SKU(家庭版不支持部分企业包) |
Step3 标准排查流程
- 单独测试单包 / 单驱动注入(排除批量文件中某一个坏文件)
Add-WindowsDriver -Path D:\mount -Driver D:\drivers\single.inf - 查看 CBS 离线日志(最核心排错依据)
日志路径:
D:\mount\Windows\Logs\CBS\CBS.log - 清理旧挂载会话,重新挂载
Clear-WindowsMountedImage Dismount-WindowsImage -Path D:\mount -Discard Mount-WindowsImage -ImagePath D:\install.wim -Index 1 -Path D:\mount - 若离线 CBS 栈异常:使用同版本 ADK 的 DISM,不要用老系统自带 dism 处理新 Win11 镜像
- 驱动签名问题:测试可临时允许未签名驱动(生产必须带微软 WHQL 签名)
Step4 兜底修复方案
- 原始 wim 干净重新导出(Export-WindowsImage),基于新 wim 重新注入
- 不要在在线系统直接离线注入大量包,优先 PE / 独立部署机操作
- 大批量注入建议循环脚本 + 捕获输出日志,定位失败文件
Step5 生产禁忌
❌ MSU 直接离线注入容易异常,优先提取 MSU 内部 CAB 再 Add-Package ❌ 不要混用跨大版本更新包(Win10 包不能直接注入 Win11 镜像) ❌ ESD 镜像直接注入后 commit(必然失败) ❌ 挂载目录放在压缩盘、FAT32
配套一键批量注入模板
Import-Module Dism
$mountPath = "D:\mount"
$driverFolder = "D:\drivers"
$cabFolder = "D:\updates"
Add-WindowsDriver -Path $mountPath -Driver $driverFolder -Recurse
Get-ChildItem $cabFolder -Filter *.cab | ForEach-Object{
Add-WindowsPackage -Path $mountPath -PackagePath $_.FullName
}
Dismount-WindowsImage -Path $mountPath -Save
使用 dism /Get-ImageInfo 命令来查看 WIM 文件中的映像信息和功能列表。以下是使用示例:
dism /Get-ImageInfo /ImageFile:路径\文件名.wim
在这个命令中,您需要将 "路径\文件名.wim" 替换为您要查看的 WIM 文件的实际路径和名称。
执行此命令后,您将看到有关 WIM 文件中每个映像的详细信息,包括索引号、名称、描述等。这样可以帮助您确定要使用的映像索引号以及其包含的功能列表。
要将多个功能应用于 WIM 文件,您可以使用 dism /Image 命令并结合 /Add-Capability 参数。以下是示例命令:
dism /Image:路径\已安装映像 /Add-Capability /CapabilityName:功能名1 /CapabilityName:功能名2 /CapabilityName:功能名3
在这个命令中,您需要将 "路径\已安装映像" 替换为已安装映像的路径,而 "功能名1", "功能名2", "功能名3" 则是您要添加的功能的名称。
例如,如果您要向已安装的映像添加 "NetFx3" 和 "TelnetClient" 功能,命令将如下所示:
dism /Image:C:\Mount\Windows /Add-Capability /CapabilityName:NetFx3 /CapabilityName:TelnetClient
请注意,您需要以管理员权限运行命令提示符才能执行此操作,并且在执行之前,您可能需要将 WIM 文件加载到某个目录中,以便可以修改它。完成后,不要忘记卸载 WIM 文件以保存更改。
在 WIM 文件中关闭多个功能,您可以使用 dism /Image 命令并结合 /Remove-Capability 参数。以下是示例命令:
dism /Image:路径\已安装映像 /Remove-Capability /CapabilityName:功能名1 /CapabilityName:功能名2 /CapabilityName:功能名3
在这个命令中,您需要将 "路径\已安装映像" 替换为已安装映像的路径,而 "功能名1", "功能名2", "功能名3" 则是您要删除的功能的名称。
例如,如果您要从已安装的映像中删除 "NetFx3" 和 "TelnetClient" 功能,命令将如下所示:
dism /Image:C:\Mount\Windows /Remove-Capability /CapabilityName:NetFx3 /CapabilityName:TelnetClient
请注意,您需要以管理员权限运行命令提示符才能执行此操作,并且在执行之前,您可能需要将 WIM 文件加载到某个目录中,以便可以修改它。完成后,不要忘记卸载 WIM 文件以保存更改。

浙公网安备 33010602011771号