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

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

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

  • 它们之间有何关联?
  • 应按照什么顺序运行它们?
  • 为什么执行时顺序很重要?

答案1

组件存储[ %WinDir%\WinSxS] 维护所有 Windows 系统文件的备份,并且SFC[年代系統F伊莱C赫克尔]&DISM[就业法师年代服务和管理] 管理组件存储和操作系统两个独立且重要的部分,并SFC依靠完全根据什么DISM来管理:

  • DISM有两个功能SFC依赖于,/StartComponentCleanup并且/RestoreHealth/RestoreHealth依赖于/StartComponentCleanup
    • /StartComponentCleanup 清洁任何损坏的组件商店硬链接
      (由于更新频繁,Insider Builds 上的用户必须定期运行此程序)
    • /RestoreHealth 通过哈希比较来验证组件存储中的系统文件备份与 Windows 更新服务器中已知的良好副本,从而验证并修复组件存储中的任何损坏;虽然确实存在离线方法 [见下文],但它可能无法始终修复损坏
      • Windows 7的: 苏里南[年代系統更新R可以使用 [eadiness] 工具来代替它,因为DISM直到 Windows 8 才具有此功能,SUR 的操作方式与DISM

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

SFCDISM 将不会解决硬件相关问题,因为它们只能解决操作系统文件损坏问题,排除注册表配置单元、非操作系统捆绑驱动程序以及用户配置文件:

%WinDir%\System32\drivers\etc


DISMSFC 必须按所列顺序执行:
(每个都是分层的,取决于前面的功能 | Windows 7:跳至 #3)

  1. WinKey+ R打开powershellCtrl++Shift确定
    # Windows ≥8:
      # Online [booted Windows image]:
        Dism /Online /Cleanup-Image /StartComponentCleanup
    
      # Offline [non-booted Windows image]:
        Dism /Image:"Z:\Windows" /Cleanup-Image /StartComponentCleanup
    
    命令
    # Online:
      Repair-WindowsImage -Online -StartComponentCleanup
    
    # Offline:
      Repair-WindowsImage -Path "Z:\Windows" -StartComponentCleanup
    
    组件存储应该始终已清理在运行 Windows 更新之前、Windows 更新出现问题之后以及至少每月一次,因为随着时间的推移,更新偶尔会中断,它会变得很脏硬链接

  2. # Windows ≥8:
      # Online [booted Windows image]:
        Dism /Online /Cleanup-Image /RestoreHealth
    
      # Offline [non-booted Windows image]:
        Dism /Image:"Z:\Windows" /Cleanup-Image /RestoreHealth
    
    命令
    # Online:
      Repair-WindowsImage -Online -RestoreHealth
    
    # Offline:
      Repair-WindowsImage -Path "Z:\Windows" -RestoreHealth
    
    需要互联网连接,否则将需要离线方法:
    • 使用install.<esd|wim>来自Windows 安装 ISO 对于已安装的版本:
      1. 创建 Windows <#> 安装媒体立即下载工具安装在另一台电脑上
      2. 挂载 ISO 以确定已安装的操作系统指数[图片] 来自其install.<esd|wim>
        Dism /Get-ImageInfo /ImageFile:"Y:\sources\install.<esd|wim>"
        
        命令
        Get-WindowsImage -ImagePath "Y:\sources\install.<esd|wim>"
        
      3. 在末尾指定索引号/Source范围:
        # Online [booted Windows image]:
         # ESD:
           Dism /Online /Cleanup-Image /RestoreHealth /Source:esd:"Y:\sources\install.esd":6 /LimitAccess
        
         # WIM:
           Dism /Online /Cleanup-Image /RestoreHealth /Source:wim:"Y:\sources\install.wim":6 /LimitAccess
        
        # Offline [non-booted Windows image]:
           Dism /Image:"Z:\Windows" /Cleanup-Image /RestoreHealth /Source:esd:"Y:\sources\install.esd":6 /LimitAccess
        
        命令
        # Requires mounting ESD/WIM first:
        
          # Determine a partition to mount on:
            Gdr -PSProvider 'FileSystem'
        
          # Create Mount directory and mount ESD/WIM index:
            Mkdir "C:\Mount"
            Mount-WindowsImage -ImagePath "Y:\sources\install.<esd|wim>" -Index 6 -Path "C:\Mount" -ReadOnly
        
          # Either Source can be used: Mount\Windows || Mount\Windows\WinSxS
            Repair-WindowsImage -Image "Z:\Windows" -RestoreHealth -Source "C:\Mount\Windows"
        

  3. Windows 7的:跑过SUR 工具
  4. 重新启动;如果发现错误,请%WinDir%\Logs\DISM\dism.log从下往上检查
    (通过日志语法VS 代码
    • Windows ≥8: %WinDir%\Logs\DISM\dism.log
    • Windows 7的: %WinDir%\Logs\CBS\CheckSUR.log
      如何修复 SUR 错误

  5. # Online [booted Windows image]:
      Sfc /ScanNow
    
    # Offline [non-booted Windows image / booted to WinPE/WinRE]:
      Sfc /ScanNow /OffBootDir=Z:\ /OffWinDir=Z:\Windows
      # C: is usually not the drive letter in WinPE/WinRE
      # To ascertain: DiskPart → lis vol → exit
    

  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"
    


我每周都会通过任务计划程序以帮助防止随机问题的发生:

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

导入到任务计划程序:

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

  • 命令行:
    • Cmd
      SchTasks /Create /Xml "%UserProfile%\Downloads\<task_name>.xml" /Tn "\Custom\Task Name" /Ru "%ComputerName%\%UserName%"
      
    • Powershell
      Register-ScheduledTask -Xml (Get-Content '$env:UserProfile\Downloads\<task_name>.xml' | Out-String) -TaskName "Task Name" -TaskPath "\Custom\" -User $env:ComputerName\$env:UserName –Force
      

相关内容