DISM /RestoreHealth 参数和 SFC 的用途是什么?

JW0*_*914 9 windows windows-8 dism sfc windows-10

DISM /RestoreHealth参数和SFC /ScanNow参数的目的是什么?

  • 它们如何相互关联?
  • 它们应该以什么顺序运行?
  • 为什么执行顺序时顺序很重要?

JW0*_*914 10

组件商店[ %WinDir%\WinSxS]维护所有的Windows系统文件的备份副本; SFCDISM管理组件存储和操作系统的两个独立的重要部分,完全SFC依赖于管理的内容。DISM



  • DISM有两个函数SFC依赖,/StartComponentCleanup/RestoreHealth/RestoreHealth完全依赖/StartComponentCleanup
    • /StartComponentCleanup 清除任何损坏的硬链接 的组件存储
      (由于频繁更新,Insider Builds 上的人员必须定期运行此程序)
    • /RestoreHealth 通过哈希比较,根据来自 Windows 更新服务器的已知良好副本验证其系统文件备份,从而验证和修复组件存储中的任何损坏;虽然[下面]确实存在离线方法,但它可能并不总是能修复损坏
      • Windows 7:使用 SUR [系统更新准备] 工具代替Dism此功能,因为直到 Windows 8 才具有此功能

  • SFC始终假定组件存储未损坏,这就是为什么DISM /RestoreHealth参数(Windows 7: SUR)应始终在 之前运行SFC;如果不这样做,则损坏的组件存储可能会用损坏的系统文件替换好的系统文件,或者无法%WinDir%完全 修复损坏的系统文件
    • /ScanNow%WinDir%通过哈希比较验证组件存储中的已知良好副本,从而验证和修复其中的任何损坏


DISM并且SFC 必须按照列出的顺序执行,因为每个都依赖于前面的内容:
(Windows 7:跳到 #3)

  1. WinKey+ R? PowerShellCtrl+ Shift+好的
    # Windows ?8:
      # Online (while booted to Windows):
        Dism /Online /Cleanup-Image /StartComponentCleanup
    
      # Offline (while booted to WinPE/WinRE):
        Dism /Image:"D:\Windows" /Cleanup-Image /StartComponentCleanup
        # C: is usually not the drive letter in WinPE/WinRE
        # To ascertain: DiskPart ? Lis Vol ? Exit
    
    Run Code Online (Sandbox Code Playgroud)在运行 Windows Update 之前、在 Windows Update 出现问题之后, 应始终清理组件存储,并且至少每月一次,因为随着时间的推移更新偶尔会破坏硬链接,它会变脏。

  2. # Windows ?8:
      # Online (while booted to Windows):
        Dism /Online /Cleanup-Image /RestoreHealth
    
      # Offline (while booted to WinPE/WinRE):
        Dism /Image:"D:\Windows" /Cleanup-Image /RestoreHealth
    
    Run Code Online (Sandbox Code Playgroud) 需要互联网连接,否则将需要离线方法:
    • 使用install.esd|| install.wim来自 已安装版本(v1909、v2004 等)Windows 安装 ISO
      1. 创建 Windows 10 安装介质现在下载工具安装在另一台电脑上
      2. 挂载 ISO 并从|| 中确定已安装的操作系统索引[image] : install.esdinstall.wim
        Dism /Get-ImageInfo /ImageFile:"Z:\sources\install.esd"
        
        Run Code Online (Sandbox Code Playgroud)
      3. /Source参数末尾指定索引号:
        # Online (while booted to Windows):
          # ESD:
            Dism /Online /Cleanup-Image /RestoreHealth /Source:esd:"Z:\sources\install.esd":6 /LimitAccess
        
          # WIM:
            Dism /Online /Cleanup-Image /RestoreHealth /Source:wim:"Z:\sources\install.wim":6 /LimitAccess
        
        # Offline (while booted to WinPE/WinRE):
          Dism /Image:"D:\Windows" /Cleanup-Image /RestoreHealth /Source:esd:"Z:\sources\install.esd":6 /LimitAccess
        
        Run Code Online (Sandbox Code Playgroud)
  3. Windows 7:运行SUR 工具
  4. 重启; 如果发现错误,检讨%WinDir%\Logs\DISM\dism.log自底向上
    (日志文件更易于阅读,并通过筛选,登录语法VS代码
    • 视窗?8: %WinDir%\Logs\DISM\dism.log
    • Windows 7中: %WinDir%\Logs\CBS\CheckSUR.log 如何解决SUR错误

  5. # Online (while booted to Windows):
      Sfc /ScanNow
    
    # Offline (while booted to WinPE/WinRE):
      Sfc /ScanNow /OffBootDir=D:\ /OffWinDir=D:\Windows
      # C: is usually not the drive letter in WinPE/WinRE
      # To ascertain: DiskPart ? Lis Vol ? Exit
    
    Run Code Online (Sandbox Code Playgroud)
  6. 重启; 如果发现错误,输出到%UserProfile%\Desktop\SFCdetails.log查看
    # Cmd:
      FindStr /c:"[SR]" "%WinDir%\Logs\CBS\CBS.log" > "%UserProfile%\Desktop\SFCdetails.log"
    
    # PowerShell:
      FindStr /c:"[SR]" "$env:WinDir\Logs\CBS\CBS.log" > "$env:UserProfile\Desktop\SFCdetails.log"
    
    Run Code Online (Sandbox Code Playgroud)


我每周通过Task Scheduler运行这些程序,以帮助防止发生随机问题:

  1. Dism_ComponentCleanup.xml
    每周日 11:30:00 执行
  2. Dism_RestoreHealth.xml
    每周日 12:00:00 执行
  3. Sfc_ScanNow.xml
    每周日 13:00:00 执行

要导入任务计划程序:

  • 图形用户界面:
    1. WinKey+R ? 打开:TaskSchd.msc
    2. 行动新建文件夹...?姓名:Custom
    3. 行动导入任务...<task_name>.xml

  • 命令行界面: