DISM 是什么
DISM(Deployment Image Servicing and Management)是 Windows 的映像维护工具,在线维护本机系统时最常用的用法是检查与修复组件存储(WinSxS 里的组件库)。系统更新失败、功能损坏、sfc /scannow 报「无法修复」时,真正的修法通常是先用 DISM /RestoreHealth 把组件库修好,再让 sfc 修复系统文件。它也能对离线映像(WIM/ESD、WinRE 环境下的系统盘)做同样的事,这是它与 sfc 最大的区别。
基本信息
| 适用平台 | Windows 8/8.1/10/11 与 Windows Server 2012 及以后;需要管理员权限 |
|---|---|
| 语法 | DISM /Online /Cleanup-Image /CheckHealth|/ScanHealth|/RestoreHealth [/Source:...] [/LimitAccess] |
| 三种检查 | /CheckHealth 秒级查已标记损坏、/ScanHealth 全量扫描、/RestoreHealth 扫描并修复 |
| 组件清理 | /AnalyzeComponentStore 分析可清理量,/StartComponentCleanup 清理被取代的旧组件 |
| 离线维护 | /Image:C:\ /Mount-Image /Apply-Image /Get-WimInfo 等 |
| 日志位置 | C:\Windows\Logs\DISM\dism.log 与 CBS.log |
典型使用场景
- 系统更新反复失败(如 0x800f081f、0x800f0906):先修组件库再重试更新
- sfc 修不动:sfc 提示无法修复某些文件时,用 DISM 从源补齐
- 蓝屏或组件缺失排障:确认组件存储是否被标记为损坏
- 空间回收:分析并清理组件存储中不再需要的旧版本组件
- 离线修复:进入 WinRE 或挂载镜像,给无法正常启动的系统修组件
常用示例
常用示例
REM 第一步:快速判断组件库是否已被标记损坏(秒级)
DISM /Online /Cleanup-Image /CheckHealth
REM 第二步:全量扫描,确认损坏范围(耗时数分钟到十几分钟)
DISM /Online /Cleanup-Image /ScanHealth
REM 第三步:联网或本地源修复
DISM /Online /Cleanup-Image /RestoreHealth
REM 走本地源(挂载 ISO 或插入安装介质)并禁止联网获取
DISM /Online /Cleanup-Image /RestoreHealth /Source:wim:D:\sources\install.wim:1 /LimitAccess
REM 离线(WinRE 或挂载的镜像)修复,需指定暂存目录
DISM /Image:C:\ /Cleanup-Image /RestoreHealth /ScratchDir:C:\Scratch
REM 组件存储瘦身
DISM /Online /Cleanup-Image /AnalyzeComponentStore
DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase三种操作怎么选
| 参数 | 做什么 | 耗时与影响 |
|---|---|---|
| /CheckHealth | 只读已记录的损坏标记,不做扫描 | 秒级;显示「未检测到组件存储损坏」不代表真的完好 |
| /ScanHealth | 全量扫描组件存储并记录损坏 | 数分钟以上;只报告不修复 |
| /RestoreHealth | 扫描并尝试修复,必要时从源补齐 | 更久;失败常见错误 0x800f081f(找不到源) |
| /AnalyzeComponentStore | 统计可清理的旧组件与回收空间 | 只读分析,可反复执行 |
推荐顺序是「先 DISM /RestoreHealth 修组件库,再 sfc /scannow 修系统文件」。反过来做,sfc 常因缺少可用源而报修复失败。
RestoreHealth 失败多数与源有关:企业环境拦截了 Windows Update,需要挂载同版本的 install.wim 或 install.esd 并用 /Source 指定,WIM 要带上索引号(如 :1),同时用 /LimitAccess 避免它又去联网。
结果核对与日志定位
结果核对与日志定位
DISM /Online /Cleanup-Image /ScanHealth > D:\dism_scan.txt # 留档输出
Get-Content C:\Windows\Logs\DISM\dism.log -Tail 50 # 看最近的处理过程
Get-Content C:\Windows\Logs\CBS\CBS.log -Tail 50 # 组件服务日志选段
REM 修复完成后再让 sfc 收尾
sfc /scannow/ResetBase 会永久移除已被取代的组件版本,之后所有已安装更新无法卸载回滚。生产环境执行前确认接受「不能卸载补丁」这一后果。