当前位置:   article > 正文

PnPUtil简介与使用

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命令。

  1. /subdirs 参数将遍历驱动程序包的子目录,
  2. /install 参数将在匹配的设备上安装或者更新驱动,
  3. /reboot 参数将通过必要重启操作来完成驱动程序包的添加生效。
  4. 示例1:添加驱动程序包
  5. pnputil /add-driver x:\driver.inf
  6. (对应旧式命令:pnputil /a x:\driver.inf)
  7. 示例2:添加多个驱动程序包
  8. pnputil /add-driver c:\oem\*.inf
  9. (对应旧式命令:pnputil /a c:\oem\*.inf)
  10. 示例3:遍历子目录进行添加并安装驱动程序包
  11. pnputil /add-driver *.inf /subdirs /install
  12. (对应旧式命令:pnputil /a *.inf /subdirs /i)

 

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

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

  1. /uninstall 卸载驱动程序包
  2. /force 强制卸载
  3. /reboot 重启以完成卸载操作
  4. 示例1:删除驱动程序包
  5. pnputil /delete-driver oem0.inf
  6. (对应旧式命令:pnputil /d oem0.inf)
  7. 示例2:强制删除并卸载驱动程序包
  8. pnputil /delete-driver oem0.inf /force /uninstall
  9. (对应旧式命令: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]

枚举系统上所有的设备。

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

 

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

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

  1. /enabled | disabled 筛选启用的或者禁用的接口
  2. /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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/307740
推荐阅读
相关标签
  

闽ICP备14008679号