- PnPUtil 透過控制台完全控制來管理驅動程式和裝置。
- DriverStore 集中了軟體包;您可以匯出、安裝和清理它們。
- 指令 鍵:新增/刪除/匯出,驅動程式/裝置/類別的列舉。
- 解析 32/64 位元(SysNative)上下文可防止部署失敗。
如果你管理Windows系統,遲早都會遇到驅動程式的問題。在這種情況下,PnPUtil 就像一把瑞士軍刀,它能讓你透過命令列安全、重複地管理驅動程式包,從而節省大量時間。
除了簡單地安裝一個獨立的 .INF 檔案之外,該工具還允許您添加、安裝、列出、匯出、停用、重新啟動和刪除驅動程式和設備,並可按類別、匯流排、硬體標識符或特定實例進行精細控制。您將看到實際的命令、技巧和常見問題(及其解決方案),以便您能夠順利上手,避免任何意外情況。
PnPUtil 是什麼以及它能做什麼?
PnPUtil (PnPUtil.exe) 是一個控制台實用程序,供管理員對即插即用 (PnP) 驅動程式套件執行操作和管理裝置。它非常適合部署、企業映像,或只是為了保持驅動程式庫的整潔。
使用 PnPUtil,您可以將軟體包新增至驅動程式儲存區、將其安裝到電腦上、將其卸載,並列出現有驅動程式。列出時,會顯示 OEM 軟體包(非系統自帶的軟體包),而整合軟體包是 Windows 基本安裝或其 Service Pack 的一部分,不會顯示為 OEM 軟體包。
除了驅動程式之外,PnPUtil 還允許您操作特定裝置:停用、啟用、重新啟動、移除、掃描硬體更改,甚至查看裝置樹和設定類別。所有操作均可透過同一工具完成。
關鍵一點:許多此類操作需要以管理員權限開啟控制台,尤其是在修改系統狀態或執行硬體掃描時。

PnPUtil 在哪裡以及如何獲得幫助?
從 Windows Vista 開始,PnPUtil 就預先安裝在 Windows 系統中;它位於%windir%\system32目錄下,無需單獨下載。這意味著在任何現代版本的 Windows 系統中,您都無需額外安裝即可使用它。
若要查看嵌入式協助,請以管理員身分開啟控制台視窗並執行:
pnputil /?
在那裡,您可以看到所有可用命令及其修飾符的語法,使您無需離開會話即可發現高級參數。

DriverStore 和 INF 檔案:您需要了解的內容
Windows 在%systemroot%\System32\DriverStore\FileRepository中維護一個驅動程式套件儲存庫。此儲存庫稱為DriverStore,其中儲存了系統在偵測到對應硬體時識別並安裝的驅動程式。
INF檔案就像「食譜」,告訴 Windows 如何安裝和設定驅動程式。它們通常會與 .cat 檔案(簽名目錄)、.dll 檔案以及有時還有 .cab 檔案一起安裝。有些型號的驅動程式只需一個 INF 檔案即可安裝,而有些型號則需要多個。
在企業環境中,一個典型的應用場景是預先整合多種型號的印表機驅動程式。這樣,在部署印表機時,驅動程式已預先安裝在系統中,無需手動複製任何內容。這可以透過使用 PnPUtil 將軟體包新增至驅動程式庫 (DriverStore) 來實現。
經典範例:在具有特權的CMD控制台中,在INF 檔案所在的資料夾中,您可以執行下列命令:
pnputil -a Citizen.inf
-a(新增)修飾符會將軟體包新增至 Windows 儲存庫。如果您在同一結構中維護來自同一製造商的不同型號,也可以使用通配符一次包含多個 INF 檔案:
pnputil -a *.inf
在此過程中,Windows 可能會就驅動程式簽章發出警告。為了避免安全風險,使用製造商簽署的驅動程式至關重要;由於成本原因,一些供應商不會對其所有產品目錄進行簽名,因此在安裝之前,請務必考慮軟體包的來源和可信度。
基本 PnPUtil 指令及實際範例
PnPUtil 的強大之處在於其豐富的指令。以下是西班牙語版的詳細指南,其中包含您應該掌握的關鍵範例。
新增並安裝驅動程式
將特定包裹新增至倉庫:
pnputil /add-driver x:\driver.inf
從資料夾中新增多個軟體包:
pnputil /add-driver c:\oem\*.inf
立即在現有裝置上新增並安裝該軟體包:
pnputil /add-driver device.inf /install
提示:如果您要將許多驅動程式載入到具有子資料夾的結構中,則可以使用/subdirs遞歸遍歷它們,並將它們與/install合併,以便立即應用它們。
從倉庫中刪除包
從驅動程式商店中移除特定軟體包:
pnputil /delete-driver oem0.inf
如果存在鎖定,則強制刪除:
pnputil /delete-driver oem1.inf /force
請記住,建議只移除未使用的軟體包,以避免對正在運行的設備產生副作用。
啟用和停用設備
透過實例標識符禁用設備:
pnputil /disable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
停用所有與硬體識別碼相符或相容的裝置:
pnputil /disable-device /deviceid "USB\Class_03"
停用給定總線上特定類別的裝置:
pnputil /disable-device /class "USB" /bus "PCI"
對於相反的操作,您可以使用等效參數啟用它們:
pnputil /enable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
pnputil /enable-device /deviceid "USB\Class_03"
pnputil /enable-device /class "USB" /bus "PCI"
當您需要批次或按識別標準監控設備狀態時,這些操作非常有用;例如,在有許多週邊設備的環境中管理USB 控制器。
列出類別、裝置和驅動程式
列出所有設備配置類別:
pnputil /enum-classes
列出有關特定類別(例如,螢幕)的資訊:
pnputil /enum-classes /class "Display"
列出系統設備。已啟用的裝置顯示為「已啟動」,已停用的裝置顯示為「已停用」。
pnputil /enum-devices
非常有用的設備枚舉變體:
pnputil /enum-devices /connected
pnputil /enum-devices /instanceid "ROOT\SYSTEM\0000"
pnputil /enum-devices /class "Display"
pnputil /enum-devices /problem 28
pnputil /enum-devices /problem /deviceids
pnputil /enum-devices /deviceid "USB\Class_03"
pnputil /enum-devices /bus "PCI"
列出OEM 驅動程式套件:
pnputil /enum-drivers
按類別篩選或包含構成每個包的檔案:
pnputil /enum-drivers /class "System"
pnputil /enum-drivers /files
列出介面
僅顯示已啟用的介面:
pnputil /enum-interfaces /enabled
按介面類別 GUID篩選:
pnputil /enum-interfaces /class "{884b96c3-56ef-11d1-bc8c-00a0c91405dd}"
這對於診斷與某些介面相關的通訊問題或服務非常有用。
導出驅動程式
匯出單一軟體包:
pnputil /export-driver oem6.inf .
將所有軟體包匯出到指定路徑(該路徑必須已存在):
pnputil /export-driver * c:\backup
批次匯出非常適合備份或準備在其他執行相同作業系統的電腦上進行部署。
刪除、重新啟動和掃描設備
每個執行個體移除一台設備:
pnputil /remove-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
按硬體識別碼/相容方式或按類別和匯流排移除裝置:
pnputil /remove-device /deviceid "USB\Class_03"
pnputil /remove-device /class "USB" /bus "PCI"
選擇性地或根據廣泛的標準重啟設備:
pnputil /restart-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
pnputil /restart-device /deviceid "USB\Class_03"
pnputil /restart-device /class "USB" /bus "PCI"
查看系統偵測到的硬體變更:
pnputil /scan-devices
重要提示:執行設備掃描需要管理員權限。
設備和容器樹
列出完整的設備樹:
pnputil /enum-devicetree
選擇一個特定的根節點並新增其他資訊:
pnputil /enum-devicetree "ROOT\SYSTEM\0000"
pnputil /enum-devicetree ROOT\SYSTEM\0000 /drivers
pnputil /enum-devicetree /connected /interfaces
pnputil /enum-devicetree /stack /interfaces /drivers /services
列出設備容器(全部、特定容器以及帶有輸出選項的容器):
pnputil /enum-containers
pnputil /enum-containers /containerid "{00000000-0000-0000-ffff-ffffffffffff}"
pnputil /enum-containers /connected /devices
pnputil /enum-containers /disconnected /devices /format xml /output-file disconnecteddevices.xml
這些高階視圖有助於在發生複雜事件時了解控制器和服務之間的依賴關係和堆疊。
批次匯出和安裝驅動程式(CMD 和 PowerShell)
若要在相同型號和作業系統的電腦之間遷移驅動程序,可以使用 PnPUtil匯出整個驅動程式庫,然後再重新匯入。這種方法速度快,而且無需依賴第三方工具。
首先,將所有包匯出到已建立的目標資料夾:
pnputil /export-driver * c:\temp\Drivers
或者,您也可以使用PowerShell中適用於線上系統的原生 cmdlet:Export-WindowsDriver
Export-WindowsDriver -Online -Destination "c:\temp\Drivers"
將該資料夾放在 USB 驅動器、網路磁碟機或 NAS 上後,您可以透過兩種方式在目標電腦上安裝驅動程式:手動(右鍵單擊 .INF 檔案並選擇「安裝」)或透過瀏覽子資料夾並套用驅動程式自動安裝。
pnputil /add-driver "c:\temp\Drivers\*.inf" /subdirs /install /reboot
/reboot 選項允許系統在必要時重新啟動以完成安裝。請務必儲存您的工作,因為有時驅動程式需要重新啟動才能生效。
如果您要整合通用或製造商特定的印表機驅動程序,您會發現匯入後,它們會出現在系統的可用驅動程式清單中,從而簡化新增印表機或裝置時的選擇。
控制器倉庫的清潔和維護
隨著時間的推移,DriverStore 會累積一些您不再使用的軟體包。為了保持系統清潔和安全,建議定期檢查其內容。
首先列出設備上存在的 OEM(第三方)軟體包:
pnputil.exe /enum-drivers
如果您偵測到某個軟體包未使用,並希望透過指定其 OEM 名稱將其刪除,可以使用對應的命令:
pnputil.exe /delete-driver oemX.inf
當您需要新增驅動程式或恢復已刪除的驅動程式時,請將其重新整合到驅動程式庫中:
pnputil.exe /add-driver oem0.inf
對於備份,請記住,您可以使用以下命令匯出特定軟體包或整個倉庫:
pnputil.exe /export-driver oem6.inf C:\DriverBackup
pnputil.exe /export-driver * C:\DriverBackup
如果您需要使用本機路徑重新安裝設備,設備管理員可讓您更新驅動程式並蒐索您準備的備份資料夾。這是重新套用已匯出驅動程式的簡單方法。
真實案例與問題解決
從已加入網域的伺服器部署印表機或使用 Intune (Win32) 安裝時,通常需要在註冊列印驅動程式之前將驅動程式註入到儲存庫中。這時 PnPUtil 就派上用場了。
如果進程運行在 32 位元環境下,但您想要執行 64 位元版本的 PnPUtil,請呼叫SysNative路徑以避免重新導向至 SysWOW64:
C:\Windows\SysNative\pnputil.exe /add-driver "C:\ruta\al\driver.inf" /install
然而,這裡存在一個經典問題:即使 INF 檔案存在,命令仍然會傳回「系統找不到指定的檔案」的錯誤訊息。這通常是由於上下文問題造成的:相對路徑、工作目錄、權限問題,或者是因為 32 位元進程在沒有 SysNative 的情況下無法正確解析 System32。
避免此錯誤的良好做法:
- 使用絕對路徑 並加上引號:「C:\\temp\\PrintDriver\\KOBS9J__.inf」。
- 始終透過 64 位元呼叫 PnPUtil %windir%\SysNative\pnputil.exe 當啟動器是 32 位元時。
- 驗證 INF 及其相依性(.cab、.dll)是否在 相同的工作資料夾 或在可通行的路線上。
- 如果您從 Intune 運行,請記住它是運行為 系統:預先建立日誌資料夾(例如 C:\Temp)並檢查 ACL。
在 64 位元環境中使用 PowerShell 和強大的 Start-Process 進行安裝的範例,並附有輸出日誌記錄:
$pnputil = "$env:windir\SysNative\pnputil.exe"
$inf = "C:\\temp\\PrintDriver\\KOBS9J__.inf"
$log = "C:\\temp\\pnputil_log.txt"
New-Item -Path (Split-Path $log) -ItemType Directory -Force | Out-Null
Start-Process -FilePath $pnputil -ArgumentList @("/add-driver", $inf, "/install") -Wait -NoNewWindow -RedirectStandardOutput $log -PassThru
如果日誌為空,請嘗試重新導向錯誤,或直接使用原生 PowerShell(不使用 Start-Process)擷取輸出,以保留回傳程式碼:
& $pnputil /add-driver $inf /install | Tee-Object -FilePath $log
在印表機安裝中,典型的工作流程是:使用 PnPUtil 新增驅動程序,然後註冊印表機驅動程式(例如,使用 Add-PrinterDriver 命令),並引用 DriverStore 中已有的 INF 檔案路徑。如果軟體包包含 .cab 檔案(例如佳能驅動程式中的 gppcl6.cab),請確保該檔案存在,因為 INF 檔案可能依賴它。
Intune 中另一個反覆出現的問題是,腳本會在最後正確建立一個「標記」檔案(表示腳本已完成),但驅動程式卻未安裝。這通常表示 Start-Process 命令未正確提升權限,或上下文找不到 INF 檔案路徑。使用 SysNative、完整路徑、預先建立 C:\\Temp 目錄以及驗證 PnPUtil 的退出程式碼有助於解決此問題。
最後,使用`/scan-devices` 執行變更掃描時,請記住它需要管理員權限。務必在提升權限的控制台中執行該命令,以避免存取錯誤。
熟練 PnPUtil 在實際應用中至關重要:從準備預裝印表機的映像或在格式化前導出驅動程序,到清理驅動程序存儲區和診斷問題設備,PnPUtil 都能助您一臂之力。本文中的命令和實踐練習將為您打下堅實的基礎,讓您在 Windows 系統中可靠地管理驅動程序,減少意外情況的發生。
對字節世界和一般技術充滿熱情的作家。我喜歡透過寫作分享我的知識,這就是我在這個部落格中要做的,向您展示有關小工具、軟體、硬體、技術趨勢等的所有最有趣的事情。我的目標是幫助您以簡單有趣的方式暢遊數位世界。
