PnPUtil简介与使用

一、PnPUtil简单介绍

PnPUtil是Windows内置的一个命令行工具,位于%windir%\system32目录下,用于管理员对驱动程序包执行安装、删除、枚举等相关操作:

  • 将驱动程序包添加到驱动程序存储区
  • 在计算机上安装驱动程序包
  • 从驱动程序存储区删除驱动程序包
  • 枚举当前位于驱动程序存储区中的非内置驱动程序包,内置驱动程序包是Windows或其service pack的默认安装中包含的程序包。

 

二、PnPUtil命令与使用

通过管理员权限打开cmd,执行PnPUtil命令,其参数如下:

pnputil [/add-driver <...> | /delete-driver <...> | /export-driver <...> | /enum-drivers | /disable-device <...> | /enable-device <...> | /restart-device <...> | /remove-device <...> | /scan-devices <...> | /enum-devices <...> | /enum-interfaces <...> | /?]

1、/add-driver * <文件名.inf | .inf> [/subdirs][/install][/reboot]

此命令用于将驱动程序包添加到驱动程序存储区中,也是最常用的安装驱动程序的PnPUtil命令。

/subdirs 参数将遍历驱动程序包的子目录, 
/install 参数将在匹配的设备上安装或者更新驱动, 
/reboot 参数将通过必要重启操作来完成驱动程序包的添加生效。 

示例1:添加驱动程序包
pnputil /add-driver x:\driver.inf 
(对应旧式命令:pnputil /a x:\driver.inf) 


示例2:添加多个驱动程序包 
pnputil /add-driver c:\oem\*.inf 
(对应旧式命令:pnputil /a c:\oem\*.inf) 

示例3:遍历子目录进行添加并安装驱动程序包 
pnputil /add-driver *.inf /subdirs /install 
(对应旧式命令:pnputil /a *.inf /subdirs /i)

 

2、/delete-driver <oem# .inf> [/uninstall][/force][/reboot]

此命令用于从驱动程序存储区中删除驱动程序包,有时直接删除设备管理器可能无效,通过管理员身份打开命令行窗口查看当前安装的驱动程序,然后通过PnPUtil命令进行驱动程序包的删除。这是PnPUtil的常用命令之一。

/uninstall 卸载驱动程序包 
/force 强制卸载 
/reboot 重启以完成卸载操作 

示例1:删除驱动程序包 
pnputil /delete-driver oem0.inf 
(对应旧式命令:pnputil /d oem0.inf) 

示例2:强制删除并卸载驱动程序包 
pnputil /delete-driver oem0.inf /force /uninstall 
(对应旧式命令:pnputil /d oem0.inf /f /uninstall)

 

3、/export-driver <oem#.inf | *>

将驱动程序包从驱动程序存储区导出到目标目录。

 

4、/enum-driver

枚举驱动程序存储区中的所有第三方驱动程序包。

示例1:枚举OEM驱动程序包 pnputil /enum-drivers (对应旧式命令:pnputil /e)

 

5、/disable-device <instance ID>[/reboot]

禁用系统上的设备。

 

6、/enable-device <instance ID>[/reboot]

启用系统上的设备。

 

7、/restart-device <instance ID>[/reboot]

重新启用系统上的设备。

 

8、/remove-device <instance ID>[/subtree][/reboot]

从系统中删除设备。

/subtree 删除整个设备子树,包括子设备

 

9、/scan-devices [/instanceid <instance ID>][/async]

扫描系统中是否有任何设备硬件更改。

/instanceid <instance ID> 扫描设备子树改变 /async 异步扫描改变

 

10、/enum-devices [/connected][/disconnected][/instanceid <instance ID>][/class <name | GUID>][/problem [<problem code>]][/ids][/relations][/drivers]

枚举系统上所有的设备。

/connnect | /disconnect 筛选连接的或者没有连接的设备 
/instanceid <instance ID> 通过设备实例ID筛选 
/class <name | GUID> 通过设备类名或者GUID筛选 
/problem [<code>] 筛选有问题的设备或者指定问题代码 
/ids 显示硬件ID或者兼容ID 
/drivers 显示匹配的或者已安装的驱动

 

11、/enum-interfaces [/enabled | /disable][/class 相同 <GUID>]

枚举系统上的所有设备接口。

/enabled | disabled 筛选启用的或者禁用的接口 
/class <GUID> 筛选接口类GUID

 

12、/?

显示命令行语法。

 

三、PnPUtil简单使用

此工具平时最常用的操作就是安装、卸载与枚举第三方的驱动程序。

1、安装驱动

通常,我们在安装pureOS后需要安装第三方的驱动程序,如蓝牙、WiFi、音频Audio等驱动,来实现蓝牙、WiFi等功能的使用。一般通过/add-driver参数、/subdirs参数以及/install参数来实现一次性添加并安装驱动程序。

pnputil /a *.inf /subdirs /install

 

2、卸载驱动

有时候,对于同一个驱动,有可能安装了多次,那么在系统已安装的驱动程序包中可能存在多个inf文件,所以这会导致一个现象:通过在设备管理器中进行卸载设备,过一会卸载的设备又再次出现在设备管理器中,可能需要多次操作才能卸载成功。

这是因为选择进行卸载的设备会对应系统中的一个inf文件,在设备管理器中点击删除设备会把对应的inf删除,但是这个时候系统中关于此设备可能进行过多次安装,所以一个驱动文件系统中的三方驱动程序列表会对应多个inf名称。

那么,我们可以通过dism命令来直观的查看三方驱动程序列表,查看设备对应的原始inf文件在列表中对应的oem#.inf文件名称。

dism /online /get-drivers /format:table

然后通过pnputil命令来删除并卸载对应的oem#.inf文件,以确保某一设备对应的驱动被卸载,系统中无残留。

pnputil /d oem1.inf /uninstall

 

3、枚举驱动

通过/enum-driver即可枚举系统中安装的所有三方驱动程序:

pnputil /enum-driver (pnputil /e)

 

四、排查

检查系统日志:%windir%\inf\setupapi.dev.log

 

五、参考资料

1、MSFT-PnPUtil

 

  • 9
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值