Windows WMI 錯誤修復教學:BIG5 批次檔製作、執行與結果判讀 文章封面圖

Enterprise Software

Windows WMI 錯誤修復教學:BIG5 批次檔製作、執行與結果判讀

遇到 WMI Provider Host 異常、WMI: Not Found、系統資訊讀取失敗或管理工具無法正常運作時,先別急著重灌 Windows。本篇帶您從低風險的 DISM、SFC 檢查開始,再逐步完成 BIG5 批次檔、以系統管理員身分執行 9 階段修復,並透過日誌與重新驗證判斷是否修復成功。

Windows WMI 錯誤修復教學:BIG5 批次檔製作、執行與結果判讀 文章封面圖

先說結論:這份批次檔會停止 WMI 服務、重建 WMI Repository、重新註冊元件,屬於進階修復。若只是一般系統檔案損壞,請先執行本文的 DISM 與 SFC;只有在 WMI 明確異常,且已備份重要資料或經技術人員確認後,才執行完整批次檔。

什麼情況適合參考這篇教學?

WMI(Windows Management Instrumentation,Windows 管理規範)提供系統資訊與管理資料給裝置管理、監控軟體、企業管理工具及部分安裝程式使用。當您遇到「WMI: Not Found」、WBEM_E_INVALID_CLASS、WBEM_E_NOT_FOUND、系統資訊無法讀取,或依賴 WMI 的管理程式持續失敗時,才可能需要處理 WMI。

如果問題只是單一應用程式打不開、網路不通、印表機離線或電腦變慢,原因不一定是 WMI。請先重新開機、安裝 Windows 更新,並確認該應用程式本身的錯誤訊息,不要直接執行重建。

第一階段:先做低風險修復

Microsoft 建議修復系統檔案時先執行 DISM,再執行 SFC。請在工作列搜尋「命令提示字元」,按右鍵選擇「以系統管理員身分執行」,依序輸入:

DISM.exe /Online /Cleanup-Image /RestoreHealth

看到作業成功完成後,再輸入:

sfc /scannow

請等到驗證達到 100%,不要關閉視窗。完成後重新啟動電腦,測試原本發生錯誤的功能。若問題已排除,就不需要再執行 WMI 重建批次檔。

第二階段:執行前的四項準備

  1. 備份重要資料:至少先備份桌面、文件與工作檔案;公司電腦請先通知資訊人員。
  2. 建立還原點或系統備份:此批次檔會變更 Windows 系統元件及 WMI 資料庫,請保留回復方式。
  3. 接上電源並關閉其他程式:筆電請接上充電器,暫存正在編輯的內容,避免修復期間休眠或關機。
  4. 準備管理員帳號與網路:批次檔需要系統管理員權限;DISM 通常會透過 Windows Update 取得修復來源。

第三階段:如何完成 BIG5 批次檔

可直接複製的完整批次檔程式碼

請從第一行 @echo off 複製到最後一行 exit /b 0,中間不要漏行。這個版本也修正了原檔權限不足時使用 Windows 預設不存在的 tee 指令,並加入 chcp 950,讓 Big5 中文提示較不容易變成亂碼。

@echo off
chcp 950 >nul
:: WMI_Full_Repair_Fixed.bat
:: 改良版:具有權限檢查、錯誤處理與日誌記錄
setlocal enabledelayedexpansion

:: 日誌路徑
set "LOG=C:\WMI_Repair_Log.txt"
echo ===== WMI Repair started at %date% %time% =====> "%LOG%"
echo. >> "%LOG%"

:: 權限檢查(需要管理員)
net session >nul 2>&1
if errorlevel 1 (
    echo [ERROR] 必須以系統管理員身分執行此批次檔。
    echo 請在檔案上按右鍵,選擇「以系統管理員身分執行」。
    echo [ERROR] 必須以系統管理員身分執行。 >> "%LOG%"
    pause
    exit /b 1
)

echo [INFO] 以系統管理員執行。 >> "%LOG%"

:: 切換到 wbem 目錄
pushd "%windir%\System32\wbem" 2>> "%LOG%"
if errorlevel 1 (
    echo [ERROR] 無法進入 %windir%\System32\wbem。
    echo [ERROR] 無法進入 WMI 工作目錄。 >> "%LOG%"
    pause
    exit /b 1
)
echo [INFO] Working folder: %cd% >> "%LOG%"

:: Step A:停止 WMI 與相關進程
echo.
echo [1/9] 停止 WMI 服務與相關程序...
echo [1/9] net stop winmgmt /y >> "%LOG%"
net stop winmgmt /y >> "%LOG%" 2>&1

:: 強制終止 wmiprvse.exe(若存在)
tasklist /FI "IMAGENAME eq wmiprvse.exe" 2>> "%LOG%" | find /I "wmiprvse.exe" >nul
if not errorlevel 1 (
    echo [INFO] 偵測到 wmiprvse.exe,嘗試強制結束 >> "%LOG%"
    taskkill /f /im wmiprvse.exe >> "%LOG%" 2>&1
)

:: Step B:備份並重建 Repository(若存在)
echo.
echo [2/9] 備份並嘗試重建 WMI Repository...
if exist Repository (
    if exist Repository.old rd /s /q Repository.old >> "%LOG%" 2>&1
    ren Repository Repository.old >> "%LOG%" 2>&1
    echo [INFO] Repository 已改名為 Repository.old >> "%LOG%"
) else (
    echo [INFO] Repository 不存在,跳過改名。 >> "%LOG%"
)

echo [2/9] winmgmt /resetrepository >> "%LOG%"
winmgmt /resetrepository >> "%LOG%" 2>&1
echo [INFO] resetrepository 完成或已回報錯誤。 >> "%LOG%"

:: Step C:重新註冊 WMI DLL
echo.
echo [3/9] 重新註冊 wbem 下的 DLL(此步驟可能花較久)...
for %%F in (*.dll) do (
    echo [REG] regsvr32 /s "%%~fF" >> "%LOG%"
    regsvr32 /s "%%~fF" >> "%LOG%" 2>&1
)

echo [3/9] 註冊 wmiprvse / winmgmt 服務註冊點 >> "%LOG%"
wmiprvse /regserver >> "%LOG%" 2>&1
winmgmt /regserver >> "%LOG%" 2>&1

:: Step D:複製 MFL(若存在 en-US / zh-TW)
echo.
echo [4/9] 嘗試複製語系 mfl 檔案到 wbem 根目錄...
set "COPIED=0"
if exist "%windir%\System32\wbem\zh-TW\cimwin32.mfl" (
    copy /Y "%windir%\System32\wbem\zh-TW\cimwin32.mfl" "%windir%\System32\wbem\" >> "%LOG%" 2>&1
    set "COPIED=1"
    echo [INFO] 複製 zh-TW\cimwin32.mfl >> "%LOG%"
)
if "%COPIED%"=="0" if exist "%windir%\System32\wbem\en-US\cimwin32.mfl" (
    copy /Y "%windir%\System32\wbem\en-US\cimwin32.mfl" "%windir%\System32\wbem\" >> "%LOG%" 2>&1
    set "COPIED=1"
    echo [INFO] 複製 en-US\cimwin32.mfl >> "%LOG%"
)
if "%COPIED%"=="0" (
    echo [WARN] 未找到 en-US 或 zh-TW cimwin32.mfl,跳過複製。 >> "%LOG%"
)

:: Step E:用 mofcomp 載入核心 MOF/MFL
echo.
echo [5/9] 編譯 cimwin32.mof 與 cimwin32.mfl...
if exist "%windir%\System32\wbem\cimwin32.mof" (
    echo [MOF] mofcomp "%windir%\System32\wbem\cimwin32.mof" >> "%LOG%"
    mofcomp "%windir%\System32\wbem\cimwin32.mof" >> "%LOG%" 2>&1
) else (
    echo [WARN] 無 cimwin32.mof,跳過。 >> "%LOG%"
)

if exist "%windir%\System32\wbem\cimwin32.mfl" (
    echo [MFL] mofcomp "%windir%\System32\wbem\cimwin32.mfl" >> "%LOG%"
    mofcomp "%windir%\System32\wbem\cimwin32.mfl" >> "%LOG%" 2>&1
)

:: Step F:批量編譯所有 .mof / .mfl
echo.
echo [6/9] 批量編譯資料夾內所有 .mof 與 .mfl 檔案...
set "COUNT=0"
for %%G in (*.mof *.mfl) do (
    if exist "%%~fG" (
        echo [MOFALL] mofcomp "%%~fG" >> "%LOG%"
        mofcomp "%%~fG" >> "%LOG%" 2>&1
        set /A COUNT+=1
    )
)
echo [INFO] 已嘗試編譯 %COUNT% 個檔案。 >> "%LOG%"

:: Step G:啟動 WMI 服務
echo.
echo [7/9] 啟動 WMI 服務...
net start winmgmt >> "%LOG%" 2>&1

:: Step H:先用 DISM 修復映像,再用 SFC 修復檔案
echo.
echo [8/9] 使用 DISM 修復 Windows 映像(可能需要一些時間)...
DISM /Online /Cleanup-Image /RestoreHealth >> "%LOG%" 2>&1

echo.
echo [9/9] 執行 SFC /scannow,修復系統檔案...
sfc /scannow >> "%LOG%" 2>&1

:: 完成
echo. >> "%LOG%"
echo ===== WMI Repair finished at %date% %time% ===== >> "%LOG%"
echo 完成。詳細日誌請看 %LOG%
echo.
popd

echo.
echo ==============================================
echo [OK] WMI 與系統修復流程已執行。
echo 日誌位置:%LOG%
echo 建議重新啟動系統以套用所有修復。
echo ==============================================
pause
exit /b 0

複製完成後,請接著依下方四個步驟儲存。若只看到程式碼的一部分,請先完整展開文章再複製。

若您已收到華薪資訊提供的「修復win批次BIG5.bat」,可直接前往下一節。若收到的是經確認的純文字程式碼,請依下列方式建立檔案:

  1. 開啟檔案總管,選擇「檢視」並顯示「副檔名」,避免最後存成 .bat.txt
  2. 開啟記事本,貼上技術人員提供的完整批次程式碼;不要自行刪除、合併或改寫指令。
  3. 選擇「另存新檔」,檔名輸入 修復win批次BIG5.bat,檔案類型選擇「所有檔案」。
  4. 繁體中文 Windows 可將編碼選為「ANSI」;跨語系工具請明確選擇 Big5/CP950。儲存後再次確認副檔名確實是 .bat

BIG5 主要影響畫面上的繁體中文提示。若編碼選錯,指令可能仍會執行,但訊息與日誌可能變成亂碼,不利於判讀;建議關閉檔案後重新用記事本開啟,先確認中文能正常顯示。

第四階段:以系統管理員身分執行

  1. 在批次檔上按滑鼠右鍵,選擇「以系統管理員身分執行」。Windows 11 若未直接顯示此選項,先選擇「顯示其他選項」。
  2. 出現使用者帳戶控制視窗時,確認檔案來自可信任來源,再按「是」。
  3. 黑色命令視窗會顯示 [1/9][9/9]。請讓它自然完成,不要關閉視窗、不要重新執行第二份,也不要強制關機。
  4. 看到完成訊息後按任意鍵關閉,接著正常重新啟動 Windows。

請保留處理時間:重新註冊元件、DISM 與 SFC 都可能停留在某個百分比一段時間。只要磁碟仍有活動、視窗沒有回報致命錯誤,請耐心等待。

批次檔的 9 個步驟在做什麼?

  1. 停止 WMI:停止 winmgmt 服務,並在需要時結束 wmiprvse.exe,避免檔案仍被使用。
  2. 備份並重設 Repository:將現有 Repository 改名保留,再執行 winmgmt /resetrepository。這是整份流程風險最高的一步。
  3. 重新註冊 WMI 元件:重新註冊 WBEM 資料夾內的 DLL,以及 WMI 相關服務註冊點。
  4. 補齊語系檔案:視電腦現況尋找繁體中文或英文的 cimwin32.mfl
  5. 載入核心定義:mofcomp 編譯核心的 CIM/WMI 定義。
  6. 批次編譯 MOF/MFL:重新載入 WBEM 資料夾內的管理類別與語系描述。
  7. 重新啟動 WMI:啟動 winmgmt 服務。
  8. 修復 Windows 映像:執行 DISM RestoreHealth。
  9. 檢查系統檔案:執行 SFC Scannow,修復遺失或損壞的受保護檔案。

第五階段:查看日誌與驗證結果

批次檔會將詳細紀錄寫入:

C:\WMI_Repair_Log.txt

重新開機後,先測試原本故障的應用程式或管理功能。也可以再次以系統管理員身分開啟命令提示字元,執行:

winmgmt /verifyrepository

若顯示 Repository 一致,代表 WMI 資料庫通過一致性檢查;這不等於所有第三方軟體都已修好,仍需測試原始問題。若日誌持續出現 Access is denied、DISM 錯誤碼、MOF 編譯失敗,或驗證結果仍不一致,請不要反覆執行批次檔。

常見問題排除

雙擊後視窗立刻關閉

先確認檔案不是 .bat.txt,再用右鍵「以系統管理員身分執行」。若仍失敗,請將日誌或畫面錯誤提供給技術人員。

畫面或日誌的中文變成亂碼

通常是檔案不是 Big5/CP950。請用記事本重新另存,繁體中文 Windows 選擇 ANSI,或請技術人員重新提供正確編碼的檔案。

DISM 或 SFC 長時間沒有前進

請先等待並觀察磁碟、CPU 與網路是否仍有活動。不要直接斷電;若最終回報錯誤,記下錯誤碼並保留 C:\WMI_Repair_Log.txt

公司電腦、網域電腦或 Windows Server 可以直接執行嗎?

不建議自行執行。WMI Repository 可能包含管理、監控及第三方軟體註冊資訊;重設後可能需要重新安裝或修復相關代理程式。請先交由資訊部門或維護廠商評估。

重要安全提醒:不要把重建 WMI 當成第一步

Microsoft 文件指出,/salvagerepository 會在偵測到不一致時嘗試重建並合併可讀內容,而 /resetrepository 會把 Repository 重設到作業系統初始狀態。Microsoft 也明確提醒,不建議在沒有支援人員指導的情況下重建或重設 WMI Repository。

因此,本文的建議順序是:先更新與重新開機,再執行 DISM、SFC;確認是 WMI 問題後先做一致性檢查;最後才在有備份、了解影響並經專業人員確認後執行完整批次檔。

參考資料

如果您不確定錯誤是否與 WMI 有關,或完整流程執行後仍未恢復,請將錯誤畫面、Windows 版本、發生時間及 C:\WMI_Repair_Log.txt 一併提供給技術人員,會比反覆嘗試更快找到原因。

回 Blog 列表