【PnPUtil】PnPUtil简介与使用

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

/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 [/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

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

4、/enum-driver

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

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

5、/disable-device [/reboot]

禁用系统上的设备。

6、/enable-device [/reboot]

启用系统上的设备。

7、/restart-device [/reboot]

重新启用系统上的设备。

8、/remove-device [/subtree][/reboot]

从系统中删除设备。

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

9、/scan-devices [/instanceid ][/async]

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

/instanceid 扫描设备子树改变 /async 异步扫描改变

10、/enum-devices [/connected][/disconnected][/instanceid ][/class ][/problem []][/ids][/relations][/drivers]

枚举系统上所有的设备。

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

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

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

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

你可能感兴趣的:(BAT批处理,windows,服务器,java)