Windows 安全性 更新失敗修復

參考系統修正更新失敗的文章

https://www.diskpart.com/articles/sfc-scannow-there-is-a-system-repair-pending-7201.html

https://forum.gamer.com.tw/Co.php?bsn=60030&sn=2235955

公司的主機常常發生安全性更新失敗,觀察了幾次之後,發現都是在做月安全性更新出錯,但是病毒碼的更新卻要正常,感覺不太可能是每個月更新包都出問題,約略同時安裝的主機卻又正常,所以到網路上搜尋了一下,並實際把該主機Clone 成另一台來測試。

一開始遇到檢查系統修復作業時有擱置(pending)的修復作業,但多次重新開機仍無法修復

這個問題其實是有一個 C:\windows\winsxs\pending.xml 這個檔案造成的問題,但是這個檔案是系統檔案,正常情況下很難刪掉,所以我選擇進到安全模式後變更權限再刪除

執行 DOS Command 先強制開機後進入安全模式 (可以用開機後猛按F8進入,但個人手殘有一定的失敗機率)

設定開機參數為進入安全模式

bcdedit /set {current} safeboot minimal

既然都打開 dos box, 順便手動重開

shutdown /r /t 1

要恢復正常開機,請輸入以下指令

bcdedit /deletevalue safeboot

系統重開機後就自動進入安全模式,登入系統後修正 pending.xml 的權限,把刪除權限賦予給 administrator 後刪除,這邊我就不貼圖了

刪掉後可以立即執行 sfc /scannow 來確認有沒有成功,如果正常就可以看到以下畫面,但是掃描要很久喔。

接下來為求謹慎,我重新開機到正常模式後再度執行了一次 sfc /scannow,同樣的並沒有發生問題,

接下來可以再試試看這兩個指令,來掃描開機的 image 有無異常

Dism /Online /Cleanup-Image /ScanHealth

Dism /Online /Cleanup-Image /CheckHealth

如果發現異常,可以執行以下指令回覆健康的 Image

DISM /Online /Cleanup-image /Restorehealth

接下來驗證看看以上作業是否正確,我用了一個Wsus 自動更新失敗的更新,上網下載離線安裝程式,先前執行都會出現不符合版本的錯誤,修復以上問題後就可以正常的執行更新。

如果各位其他服務器也發生更新失敗,不妨試試利用以上的步驟來解。

[2022/11/02 更新]

參考來源:  https://blogs.msmvps.com/bradley/2010/03/26/fixing-a-bit-of-pending-xml/

https://www.windowscentral.com/how-reclaim-space-reducing-size-winsxs-folder-windows-10

要刪除 pending.xml 也有不重開機的方法,可透過用管理員身分執行 DOS Command prompt,執行以下的指令

C:

Cd \windows\winsxs

取得該檔案的擁有權

takeown /f  pending.xml

重新賦予 pending.xml 使用者權限

cacls C:\Windows\winsxs\pending.xml /G :F

我用了檔案總管去看目前的授權,我自己把本機 administrator 賦予所有權限,然後刪除掉這個檔案,之後再執行以上步驟。

同時我看了我們的環境 winsxs 這個路徑下有很多目錄及檔案,這個應該是一些舊的更新檔案,也可以透過指令來計算那些檔案是不需要的然後刪除,其指令可以參考:

分析路徑下的內容:

dism /Online /Cleanup-Image /AnalyzeComponentStore

這個指令要跑一下下,比SFC 要快上很多,跑完後會有個建議值看要不要刪掉,可由自行判斷

清除指令

dism /online /Cleanup-Image /StartComponentCleanup