วัตถุประสงค์ของพารามิเตอร์ DISM / RestoreHealth และ SFC คืออะไร?
Aug 19 2020
วัตถุประสงค์ของDISM
/RestoreHealth
พารามิเตอร์และSFC
/ScanNow
พารามิเตอร์คืออะไร?
- มีความสัมพันธ์กันอย่างไร?
- ควรเรียกใช้ในลำดับใด
- เหตุใดลำดับการสั่งซื้อจึงมีความสำคัญเมื่อดำเนินการอย่างใดอย่างหนึ่ง
คำตอบ
3 JW0914 Aug 19 2020 at 13:28
ตัวแทนร้านค้า [ %WinDir%\WinSxS
] รักษาสำเนาสำรองของไฟล์ระบบของ Windows ทั้งหมดและSFC
และDISM
จัดการสองแยกชิ้นส่วนสำคัญของร้านค้าตัวแทนและระบบปฏิบัติการที่มีการSFC
อาศัยอย่างสิ้นเชิงกับสิ่งที่DISM
จัดการ
DISM
มีสองฟังก์ชั่นที่SFC
อาศัย/StartComponentCleanup
และ/RestoreHealth
ด้วยการ/RestoreHealth
พึ่งพาเพียงอย่างเดียว/StartComponentCleanup
/StartComponentCleanup
: ทำความสะอาด Component Store ของฮาร์ดลิงก์ที่ เสียหาย
ผู้ที่จำเป็นใน Insider Builds จะเรียกใช้สิ่งนี้เป็นประจำเนื่องจากมีการอัปเดตบ่อยครั้ง/RestoreHealth
: ตรวจสอบและแก้ไขความเสียหายในที่เก็บคอมโพเนนต์โดยการตรวจสอบว่าเป็นการสำรองข้อมูลไฟล์ระบบกับสำเนาที่ดีที่ทราบจากเซิร์ฟเวอร์ Windows Update ผ่านการเปรียบเทียบแฮช ในขณะที่มีวิธีออฟไลน์อยู่ [ด้านล่าง] แต่ก็อาจไม่สามารถแก้ไขความเสียหายได้เสมอไป
SFC
เสมอถือว่าร้านค้าตัวแทนไม่เสียหายและเป็นเหตุผลที่DISM
/RestoreHealth
พารามิเตอร์ควรจะทำงานก่อนที่จะSFC
; การไม่ทำเช่นนั้นช่วยให้ที่เก็บคอมโพเนนต์ที่เสียหายอาจแทนที่ไฟล์ระบบที่ดีด้วยไฟล์ที่เสียหายหรือล้มเหลวในการแก้ไขความเสียหายภายใน%WinDir%
ทั้งหมด/ScanNow
:ตรวจสอบและแก้ไขความเสียหายภายใน%WinDir%
โดยการตรวจสอบกับสำเนาที่ดีที่รู้จักภายใน Component Store ผ่านการเปรียบเทียบแฮช
DISM
และSFC
ต้องดำเนินการตามลำดับที่ระบุไว้เนื่องจากแต่ละรายการขึ้นอยู่กับสิ่งที่ก่อนหน้านี้ทำ:
-
ควรทำความสะอาด Component Store เสมอก่อนเรียกใช้ Windows Update หลังจากเกิดปัญหากับ Windows Update และอย่างน้อยเดือนละครั้งเนื่องจากการอัปเดตจะสกปรกเมื่อเวลาผ่านไปจากการอัปเดตบางครั้งอาจทำให้ฮาร์ดลิงก์เสียหาย# 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
-
ต้องใช้การเชื่อมต่ออินเทอร์เน็ตมิฉะนั้นจะต้องใช้วิธีการออฟไลน์:# Online (while booted to Windows): Dism /Online /Cleanup-Image /RestoreHealth # Offline (while booted to WinPE/WinRE): Dism /Image:"D:\Windows" /Cleanup-Image /RestoreHealth
- ใช้
install.esd
||install.wim
จากWindows Install ISO สำหรับเวอร์ชันที่ติดตั้ง(v1909, v2004 ฯลฯ ) :- สร้างสื่อการติดตั้ง Windows 10 → ดาวน์โหลดเครื่องมือเดี๋ยวนี้ →เลือกติดตั้งบนพีซีเครื่องอื่น
- ติดตั้ง ISO และกำหนดดัชนี OS [ภาพ] ที่ติดตั้งจาก
install.esd
||install.wim
:Dism /Get-ImageInfo /ImageFile:"Z:\sources\install.esd"
- ระบุหมายเลขดัชนีที่ส่วนท้ายของ
/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
- ใช้
- รีบูต(หากพบข้อผิดพลาดให้ตรวจสอบ
%WinDir%\Logs\DISM\dism.log
โดยเริ่มจากด้านล่างขึ้นบน)- ไฟล์บันทึกง่ายต่อการอ่านและกรองผ่านไวยากรณ์ของบันทึกในVS Code
- ไฟล์บันทึกง่ายต่อการอ่านและกรองผ่านไวยากรณ์ของบันทึกในVS Code
-
# Online (while booted to Windows): Sfc /ScanNow # Offline (while booted to WinPE/WinRE): Sfc /ScanNow /OffBootDir=D:\ /OffWinDir=D:\Windows
- รีบูต(หากพบข้อผิดพลาดให้ตรวจสอบ
%WinDir%\Logs\CBS\CBS.log
โดยเริ่มจากด้านล่างขึ้นบน)
ฉันเรียกใช้รายสัปดาห์เหล่านี้ผ่านTask Schedulerเพื่อช่วยป้องกันไม่ให้เกิดปัญหาแบบสุ่ม:
Dism_ComponentCleanup.xml
ดำเนินการทุกสัปดาห์ในวันอาทิตย์เวลา 11:30:00 นDism_RestoreHealth.xml
ดำเนินการทุกสัปดาห์ในวันอาทิตย์เวลา 12:00:00 นSfc_ScanNow.xml
ดำเนินการทุกสัปดาห์ในวันอาทิตย์เวลา 13:00:00 น
ในการนำเข้าสู่ Task Scheduler:
- GUI:
-
TaskSchd.msc
- การดำเนินการ → โฟลเดอร์ใหม่ ... →ชื่อ:
Custom
- การดำเนินการ → นำเข้างาน ... →
<task_name>.xml
-
- CLI:
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