[Win11] 修復找不到 wmic 指令的問題


最近在幫忙將家人的電腦重灌成 Windows 11 25H2 後,為了確認電腦的網卡速率、主機板資訊及晶片組型號,我打開 PowerShell 並輸入 wmic 指令。沒想到,系統竟然跳出錯誤,顯示找不到該指令。我很困惑,明明在 C:\Windows\System32\wbem 下還能看到 wmic.exe 的檔案,環境變數 (PATH) 也都設定正確,為什麼 PowerShell 就是叫不動它呢?

經過一番研究才發現,原來這是 Windows 11 在架構上的重大改變。


為什麼 wmic 會「消失」?

微軟已經將 WMIC(Windows Management Instrumentation Command-line) 標記為「已棄用 (Deprecated)」。為了讓系統更輕量化,微軟將 wmic 從預設安裝清單中移除,轉而將其改為「隨選功能 (Features on Demand)」。

這就是為什麼看得到檔案卻無法執行的原因:雖然執行檔還在,但系統層級的掛載元件並未啟用。

解決方法:使用 DISM 修復

要將 wmic 找回來,我們需要利用 Windows 的系統映像部署工具 —— DISM。請以 系統管理員身分 開啟 PowerShell,並輸入以下指令:

DISM /Online /Add-Capability /CapabilityName:WMIC~~~~

輸入後,系統會開始下載並安裝相關組件,完成後你就可以重新使用 wmic 指令來進行硬體資訊查詢了。

深入了解:為什麼指令後面要接 ~~~~

你一定很好奇,為什麼功能名稱後方要加上 ~~~~ 這麼奇怪的後綴?

在 Windows 的隨選功能命名規則中,這些符號是有意義的:

  1. 分隔符號~~~~ 作為分隔符號,將功能與後面的版本號區隔開來。

  2. 精準識別:Windows 為了確保安裝的是正確的系統組件(包含體系架構與版本號),會要求完整的名稱識別碼。沒有這些後綴,系統會無法定位該功能的套件內容。(下圖中表示沒有加上~~~~會顯示找不到組件)


  3. 版本控制:後方還可代入例如: 0.0.1.0 代表想要使用該組件的版本號,這種命名格式確保了系統管理的嚴謹性與一致性。

邁向現代化:更好的選擇

雖然透過 DISM 修復了 wmic,但身為技術人員,我們也必須意識到這是舊時代的產物。微軟官方已強烈建議改用 PowerShell 的 CIM 指令。

如果你想查詢網卡資訊,其實可以用更現代化的 Get-CimInstance 來取代:

# 原本的 wmic 用法

wmic nic get name, speed


# 推薦的現代化 PowerShell 用法

Get-CimInstance Win32_NetworkAdapter | Select-Object Name, Speed

使用 Get-CimInstance 不僅能獲取與 wmic 相同的資訊,回傳的物件格式還能直接銜接 PowerShell 的管線功能進行更複雜的資料處理。


參考



留言