PNPUTIL 驱动 添加 删除 导出(备份) DPInst64 驱动 安装

PnPUtil 命令语法 - Windows drivers | Microsoft Learn

pnputil 命令的起源可以追溯到 Windows Vista 操作系统。它是一种用于管理设备驱动程序的命令行实用工具,旨在提供一种方便的方式来安装、卸载和管理系统中的驱动程序。

在 Windows Vista 中引入了一些新的设备管理和驱动程序安装机制,pnputil 工具就是其中的一部分。它允许用户通过命令行界面来执行驱动程序的安装和卸载操作,从而简化了设备驱动程序的管理流程。

随着后续版本的 Windows 操作系统的推出,pnputil 工具得到了进一步的改进和扩展,以适应新的硬件和驱动程序管理需求。至今,pnputil 仍然是 Windows 操作系统中一个常用的设备管理工具,为用户提供了方便快捷的驱动程序管理功能。


pnputil 命令的发展经历了几个阶段,从最初的引入到后续的改进和扩展:

  1. Windows Vista(2006年)pnputil 命令最早引入于 Windows Vista 操作系统。在这个阶段,它作为一个基本的命令行实用工具,用于管理设备驱动程序的安装和卸载。

  2. Windows 7(2009年):随着 Windows 7 操作系统的推出,pnputil 命令得到了一些改进和优化,以提升其性能和稳定性。此时,它已经成为 Windows 操作系统中的一个重要的设备管理工具之一。

  3. Windows 8/8.1(2012/2013年):在 Windows 8 和 Windows 8.1 中,pnputil 命令进一步完善,增加了一些新的功能和选项,以适应新的硬件和驱动程序管理需求。同时,其用户界面和交互方式也得到了改进。

  4. Windows 10(2015年以后):随着 Windows 10 操作系统的推出,pnputil 命令继续得到改进和优化,以适应 Windows 10 的新特性和技术。同时,它也保持着向后兼容性,可以在 Windows Vista、7、8/8.1 和 10 等不同版本的操作系统中使用。

在这些发展阶段中,pnputil 命令不断完善和改进,以提供更好的设备驱动程序管理功能,为用户提供了方便快捷的驱动程序管理工具。

除了在不同版本的 Windows 操作系统中持续改进和优化外,pnputil 命令在发展过程中还可能经历了以下一些重要的阶段和变化:

  1. 增加功能和选项:随着硬件技术的不断发展和变化,以及用户对设备管理需求的不断变化,pnputil 命令可能会不断增加新的功能和选项,以满足用户对设备驱动程序管理的不同需求。这些功能和选项可能涉及到更灵活的驱动程序安装方式、更丰富的驱动程序信息展示、更便捷的驱动程序管理操作等。

  2. 性能优化和稳定性改进:随着时间的推移和技术的进步,pnputil 命令可能会进行性能优化和稳定性改进,以提升其执行效率和运行稳定性。这包括对命令执行速度的优化、对大型驱动程序包的处理能力的提升、对异常情况的处理能力的加强等。

  3. 支持新的硬件和驱动程序类型:随着新的硬件设备和驱动程序类型的不断出现,pnputil 命令可能会扩展其支持范围,以支持更多类型的设备和驱动程序。这可能涉及到对新硬件设备的识别和安装方式的改进、对新驱动程序类型的支持、对新硬件接口和标准的兼容性等。

  4. 用户界面改进和交互方式更新:除了命令行界面外,pnputil 命令还可能会引入新的用户界面和交互方式,以提供更直观、更友好的设备驱动程序管理体验。这可能包括图形用户界面(GUI)工具、交互式命令行界面(CLI)工具等。

在不同阶段和版本中,pnputil 命令可能会根据用户需求和技术发展不断演进和改进,以保持其作为 Windows 操作系统中重要的设备管理工具的地位。


pnputil 命令主要用于 Windows 操作系统中的设备驱动程序管理,其主要应用场景包括:

  1. 安装设备驱动程序:通过 pnputil 命令,用户可以安装预先打包好的设备驱动程序。这些驱动程序可能是从设备制造商的安装光盘、官方网站或其他渠道获取到的。使用 pnputil 安装驱动程序可以方便快捷,而不必依赖于设备自带的安装程序或者 Windows 自动安装程序。

  2. 卸载设备驱动程序pnputil 命令也可以用于卸载不需要的设备驱动程序。当用户需要删除某个设备的驱动程序时,可以使用 pnputil -d 命令来执行卸载操作。这可以帮助用户清理系统中不必要的驱动程序,以减少系统资源占用和提升系统稳定性。

  3. 列出已安装的驱动程序:通过 pnputil -e 命令,用户可以列出系统中已安装的所有设备驱动程序。这对于了解系统中的驱动程序情况、排查驱动程序冲突或者进行系统维护都非常有用。

  4. 导出和备份驱动程序pnputil 命令还支持将系统中已安装的驱动程序导出到指定目录,以备份或者在其他计算机上使用。用户可以使用 pnputil -e 命令列出已安装的驱动程序,然后使用 pnputil -e -o <目录> 命令将指定驱动程序导出到指定目录。

  5. 验证驱动程序签名:在安全性方面,pnputil 命令还可以验证设备驱动程序的数字签名,以确保其来源可信。这有助于防止用户安装未经认证或者来历不明的驱动程序,从而提高系统安全性。

 pnputil 命令在 Windows 系统中具有广泛的应用场景,是设备驱动程序管理的重要工具之一,能够帮助用户管理系统中的设备驱动程序,提高系统的稳定性和安全性。


pnputil 命令还有一些更高级的应用场景,包括:

  1. 驱动程序回滚:在某些情况下,更新后的驱动程序可能会导致系统出现问题,例如性能下降或者兼容性问题。pnputil 命令可以用于回滚已安装的驱动程序版本。用户可以通过 pnputil -f -d <驱动程序名称> 命令卸载当前驱动程序,然后安装旧版本的驱动程序,从而解决问题。

  2. 离线驱动程序管理:有时,用户需要在无法连接到互联网的环境中安装驱动程序,例如在没有网络连接的服务器上。pnputil 命令可以与离线驱动程序存储库结合使用,用户可以将预先下载好的驱动程序存储在本地目录中,并使用 pnputil -i -a <驱动程序路径> 命令手动安装这些驱动程序。

  3. 批量驱动程序管理:对于需要管理大量计算机或者设备的管理员来说,手动管理每台计算机上的驱动程序可能会非常繁琐。pnputil 命令可以与脚本或者管理工具结合使用,实现批量安装、卸载或者导出驱动程序的操作,从而提高管理效率。

  4. 驱动程序更新策略:在企业环境中,管理员可能需要制定驱动程序更新策略,确保系统始终使用最新的、稳定的驱动程序版本。pnputil 命令可以帮助管理员管理系统中的驱动程序版本,定期检查并更新驱动程序,从而保障系统的安全性和稳定性。

  5. 驱动程序备份和恢复:在系统升级、重装或者迁移时,备份和恢复驱动程序是非常重要的。pnputil 命令可以与备份工具结合使用,将系统中的驱动程序导出到备份文件中,并在需要时恢复到其他计算机或者新安装的系统中,从而保留设备的兼容性和稳定性。

这些高级应用场景展示了pnputil 命令的灵活性和实用性,使其成为 Windows 系统管理中的重要工具之一。


windows 11

pnputil /?
Microsoft PnP 工具

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

命令:

  /add-driver <filename.inf | *.inf> [/subdirs] [/install] [/reboot]

    将驱动程序包添加到驱动程序存储中。
      /subdirs - 遍历驱动程序包的子目录。
      /install - 在任何匹配的设备上安装/更新驱动程序。
      /reboot - 根据需要重新启动系统以完成此操作。

    示例:
      添加驱动程序包:
        pnputil /add-driver x:\driver.inf
      添加多个驱动程序包:
        pnputil /add-driver c:\oem\*.inf
      添加和安装驱动程序包:
        pnputil /add-driver device.inf /install

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

    从驱动程序存储中删除驱动程序包。
      /uninstall - 从任何使用驱动程序包的设备中卸载驱动程序包。
      /force - 删除驱动程序包,即使有设备正在使用它。
      /reboot - 根据需要重新启动系统以完成此操作。

    示例:
      删除驱动程序包:
        pnputil /delete-driver oem0.inf
      强制删除驱动程序包:
        pnputil /delete-driver oem1.inf /force

  /export-driver <oem#.inf | *> <目标目录>

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

    示例:
      导出驱动程序包:
        pnputil /export-driver oem6.inf .
      导出所有驱动程序包:
        pnputil /export-driver * c:\backup

  /enum-drivers [/class <name | GUID>] [/files]

    枚举驱动程序存储中的所有第三方驱动程序包。
      /class <name | GUID> - 通过驱动类名称或 GUID 进行筛选。
      /files - 枚举所有驱动程序包文件。

    示例:
      枚举所有 OEM 驱动程序包:
        pnputil /enum-drivers
      枚举特定类的所有 OEM 驱动程序包:
        pnputil /enum-drivers /class "System"
      枚举所有 OEM 驱动程序包并显示驱动程序文件:
        pnputil /enum-drivers /files

  /disable-device [<实例 ID> | /deviceid <设备 ID>] [/class <名称 | GUID>]
                  [/bus <name | GUID>] [/reboot] [/force]

    禁用系统上的设备。
      /deviceid <device ID> - 禁用带匹配设备 ID 的所有设备。
      /class <名称 | GUID> - 按设备类名称或 GUID 筛选。
      /bus <name | GUID> - 按总线枚举器名称或总线类型 GUID 进行筛选。
      /reboot - 根据需要重新启动系统以完成此操作。
      /force - 即使设备提供关键系统功能,也禁用。

    示例:
      禁用设备:
        pnputil /disable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
      禁用所有具有特定硬件/兼容 ID 的设备:
        pnputil /disable-device /deviceid "USB\Class_03"
      在特定总线上禁用特定类的所有设备:
        pnputil /disable-device /class "USB" /bus "PCI"

  /enable-device [<instance ID> | /deviceid <device ID>] [/class <name | GUID>]
                 [/bus <name | GUID>] [/reboot]

    启用系统上的设备。
      /deviceid <device ID> - 启用带匹配设备 ID 的所有设备。
      /class <名称 | GUID> - 按设备类名称或 GUID 筛选。
      /bus <name | GUID> - 通过总线枚举器名称或总线类型 GUID 进行筛选。
      /reboot - 根据需要重新启动系统以完成此操作。

    示例:
      启用设备:
        pnputil /enable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
      启用具有特定硬件/兼容 ID 的所有设备:
        pnputil /enable-device /deviceid "USB\Class_03"
      在特定总线上启用特定类的所有设备:
        pnputil /enable-device /class "USB" /bus "PCI"

  /restart-device [<instance ID> | /deviceid <device ID>] [/class <name | GUID>]
                  [/bus <name | GUID>] [/reboot]

    重启系统上的设备。
      /deviceid <device ID> - 重启带匹配设备 ID 的所有设备。
      /class <名称 | GUID> - 按设备类名称或 GUID 筛选。
      /bus <name | GUID> - 通过总线枚举器名称或总线类型 GUID 进行筛选。
      /reboot - 根据需要重新启动系统以完成此操作。

    示例:
      重启设备:
        pnputil /restart-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
      重新启动具有特定硬件/兼容 ID 的所有设备:
        pnputil /restart-device /deviceid "USB\Class_03"
      在特定总线上重启特定类的所有设备:
        pnputil /restart-device /class "USB" /bus "PCI"

  /remove-device [<instance ID> | /deviceid <device ID>] [/class <name | GUID>]
                 [/bus <name | GUID>] [/subtree] [/reboot] [/force]

    尝试从系统中删除设备。
      /deviceid <device ID> - 删除所有设备 ID 匹配的设备。
      /class <名称 | GUID> - 按设备类名称或 GUID 筛选。
      /bus <name | GUID> - 通过总线枚举器名称或总线类型 GUID 进行筛选。
      /subtree - 删除整个设备子树,包括任何子设备。
      /reboot - 根据需要重新启动系统以完成此操作。
      /force - 即使设备提供关键系统功能,也删除。

    示例:
      删除设备:
        pnputil /remove-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
      删除具有特定硬件/兼容 ID 的所有设备:
        pnputil /remove-device /deviceid "USB\Class_03"
      在特定总线上删除特定类的所有设备:
        pnputil /remove-device /class "USB" /bus "PCI"

  /scan-devices [/instanceid <实例 ID>] [/async]

    扫描系统以查找任何设备硬件更改。
      /instanceid <实例 ID> - 在设备子树中扫描更改。
      /async - 异步扫描更改。

    示例:
      扫描设备:
        pnputil /scan-devices

  /enum-devices [/connected | /disconnected] [/class <name |GUID>]
                [/instanceid <instance ID> | /deviceid <device ID>]
                [/problem [<code>]] [/bus [<name | GUID>]] [/deviceids]
                [/relations] [/services] [/stack] [/drivers] [/interfaces]
                [/properties] [/resources]

    枚举系统上的所有设备。
      /connected | /disconnected - 按连接的设备筛选或
                                   按断开连接的设备筛选。
      /class <名称 | GUID> - 按设备类名称或 GUID 筛选。
      /instanceid <实例 ID> - 按设备实例 ID 筛选。
      /deviceid <设备 ID> - 按设备硬件/兼容 ID 筛选。
      /problem [<代码>] - 按出现问题的设备筛选或
                          按特定问题代码筛选。
      /bus [<name | GUID>]-显示总线枚举器名称和总线类型 GUID 或
                             按总线枚举器名称或总线类型 GUID 筛选。
      /deviceids - 显示硬件/兼容 ID。
      /relations - 显示父级和子级设备关系。
      /services - 显示设备服务。
      /stack - 显示有效设备堆栈的信息。
      /drivers - 显示匹配的驱动程序和已安装的驱动程序。
      /interfaces - 显示设备接口。
      /properties - 显示所有设备属性。
      /resources - 显示设备资源。

    示例:
      仅枚举系统上已连接的设备:
        pnputil /enum-devices /connected
      枚举具有特定实例 ID 的设备:
        pnputil /enum-devices /instanceid "ACPI\PNP0A08\1"
      枚举具有特定硬件/兼容 ID 的所有设备:
        pnputil /enum-devices /deviceid "USB\Class_03"
      枚举具有特定类的所有设备:
        pnputil /enum-devices /class Display
        pnputil /enum-devices /class {4d36e97d-e325-11ce-bfc1-08002be10318}
      枚举具有特定问题代码的所有设备:
        pnputil /enum-devices /problem 28
        pnputil /enum-devices /problem 0xA
      枚举具有特定总线的所有设备:
        pnputil /enum-devices /bus PCI
        pnputil /enum-devices /bus {c8ebdfb0-b510-11d0-80e5-00a0c92542e3}
      枚举具有问题的所有设备并显示硬件/兼容 ID:
        pnputil /enum-devices /problem /deviceids

  /enum-interfaces [/enabled | /disabled] [/class <GUID>]

    枚举系统上的所有设备接口。
      /enabled | /disabled - 按启用的接口筛选或
                             按禁用的接口筛选。
      /class <GUID> - 按接口类 GUID 筛选。

    示例:
      仅枚举系统上的已启用接口:
        pnputil /enum-interfaces /enabled
      枚举具有特定接口类 GUID 的所有接口:
        pnputil /enum-interfaces /class {884b96c3-56ef-11d1-bc8c-00a0c91405dd}

  /enum-classes [/class <name | GUID>] [/services]

    枚举系统上的所有设备设置类。
      /class <名称 | GUID> - 按设备类名称或 GUID 筛选。
      /services - 显示设备类服务。

    示例:
      枚举系统上的所有设备设置类:
        pnputil /enum-classes
      枚举特定设备安装程序类的信息:
        pnputil /enum-classes /class 显示
        pnputil /enum-classes /class {4d36e968-e325-11ce-bfc1-08002be10318}

  /?

    显示使用情况屏幕。

windows server 2022

PNPUTIL /?

Microsoft PnP 实用程序

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

命令:

/add-driver <filename.inf | *.inf> [/subdirs] [/install] [/reboot]

将驱动程序包添加到驱动程序存储库。
  /subdirs - 遍历驱动程序包的子目录。
  /install - 安装/更新所有匹配设备的驱动程序。
  /reboot - 如果需要完成操作,则重新启动系统。

示例:
  添加驱动程序包:
    pnputil /add-driver x:\driver.inf
  添加多个驱动程序包:
    pnputil /add-driver c:\oem\*.inf
  添加并安装驱动程序包:
    pnputil /add-driver device.inf /install

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

从驱动程序存储库中删除驱动程序包。
  /uninstall - 从使用该驱动程序包的所有设备中卸载驱动程序包。
  /force - 即使有设备正在使用,也要删除驱动程序包。
  /reboot - 如果需要完成操作,则重新启动系统。

示例:
  删除驱动程序包:
    pnputil /delete-driver oem0.inf
  强制删除驱动程序包:
    pnputil /delete-driver oem1.inf /force

/export-driver <oem#.inf | *> <目标目录>

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

示例:
  导出驱动程序包:
    pnputil /export-driver oem6.inf .
  导出所有驱动程序包:
    pnputil /export-driver * c:\backup

/enum-drivers

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

示例:
  枚举所有 OEM 驱动程序包:
    pnputil /enum-drivers

/disable-device <instance ID> | /deviceid <device ID> [/reboot]

禁用系统上的设备。
  /deviceid <device ID> - 禁用所有具有匹配设备 ID 的设备。
  /reboot - 如果需要完成操作,则重新启动系统。

示例:
  禁用设备:
    pnputil /disable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
  禁用所有具有特定硬件/兼容性 ID 的设备:
    pnputil /disable-device /deviceid "USB\Class_03"

/enable-device <instance ID> | /deviceid <device ID> [/reboot]

启用系统上的设备。
  /deviceid <device ID> - 启用所有具有匹配设备 ID 的设备。
  /reboot - 如果需要完成操作,则重新启动系统。

示例:
  启用设备:
    pnputil /enable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
  启用所有具有特定硬件/兼容性 ID 的设备:
    pnputil /enable-device /deviceid "USB\Class_03"

/restart-device <instance ID> | /deviceid <device ID> [/reboot]

重新启动系统上的设备。
  /deviceid <device ID> - 重新启动所有具有匹配设备 ID 的设备。
  /reboot - 如果需要完成操作,则重新启动系统。

示例:
  重新启动设备:
    pnputil /restart-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
  重新启动所有具有特定硬件/兼容性 ID 的设备:
    pnputil /restart-device /deviceid "USB\Class_03"

/remove-device <instance ID> | /deviceid <device ID> [/subtree] [/reboot]

尝试从系统中移除设备。
  /deviceid <device ID> - 移除所有具有匹配设备 ID 的设备。
  /subtree - 移除整个设备子树,包括任何子设备。
  /reboot - 如果需要完成操作,则重新启动系统。

示例:
  移除设备:
    pnputil /remove-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
  移除所有具有特定硬件/兼容性 ID 的设备:
    pnputil /remove-device /deviceid "USB\Class_03"

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

扫描系统以查找任何设备硬件更改。
  /instanceid <instance ID> - 为更改扫描设备子树。
  /async - 异步扫描更改。

示例:
  扫描设备:
    pnputil /scan-devices

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

枚举系统上的所有设备。
  /connected | /disconnected - 按连接的设备或断开连接的设备进行筛选。
  /instanceid <instance ID> - 按设备实例 ID 进行筛选。
  /class <name | GUID> - 按设备类名或 GUID 进行筛选。
  /problem [<code>] - 按具有问题的设备或特定问题代码进行筛选。
  /bus [<name | GUID>] - 显示总线枚举器名称和总线类型 GUID 或按总线枚举器名称或总线类型 GUID 进行筛选。
  /deviceids - 显示硬件/兼容性 ID。
  /relations - 显示父级和子级设备关系。
  /drivers - 显示匹配和已安装的驱动程序。
  /stack - 显示设备堆栈信息。
  /interfaces - 显示设备接口。
  /properties - 显示所有设备属性。

示例:
  仅枚举系统上已连接的设备:
    pnputil /enum-devices /connected
  枚举具有特定实例 ID 的设备:
    pnputil /enum-devices /instanceid "ACPI\PNP0A08\1"
  枚举具有特定类的所有设备:
    pnputil /enum-devices /class Display
    pnputil /enum-devices /class {4d36e97d-e325-11ce-bfc1-08002be10318}
  枚举具有特定问题代码的所有设备:
    pnputil /enum-devices /problem 28
    pnputil /enum-devices /problem 0xA
  枚举具有特定总线的所有设备:
    pnputil /enum-devices /bus PCI
    pnputil /enum-devices /bus {c8ebdfb0-b510-11d0-80e5-00a0c92542e3}
  枚举存在问题的所有设备并显示硬件/兼容性 ID:
    pnputil /enum-devices /problem /deviceids

/enum-interfaces [/enabled | /disabled] [/class <GUID>]

枚举系统上的所有设备接口。
  /enabled | /disabled - 按已启用的接口或已禁用的接口进行筛选。
  /class <GUID> - 按接口类 GUID 进行筛选。

示例:
  仅枚举系统上已启用的接口:
    pnputil /enum-interfaces /enabled
  枚举具有特定接口类 GUID 的所有接口:
    pnputil /enum-interfaces /class {884b96c3-56ef-11d1-bc8c-00a0c91405dd}

/?

显示使用说明屏幕。

Microsoft PnP 工具

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

命令:

  /add-driver <filename.inf | *.inf> [/subdirs] [/install] [/reboot]

    将驱动程序包添加到驱动程序存储中。
      /subdirs - 遍历驱动程序包的子目录。
      /install - 在任何匹配的设备上安装/更新驱动程序。
      /reboot - 根据需要重新启动系统以完成此操作。

    示例:
      添加驱动程序包:
        pnputil /add-driver x:\driver.inf
      添加多个驱动程序包:
        pnputil /add-driver c:\oem\*.inf
      添加和安装驱动程序包:
        pnputil /add-driver device.inf /install

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

    从驱动程序存储中删除驱动程序包。
      /uninstall - 从任何使用驱动程序包的设备中卸载驱动程序包。
      /force - 删除驱动程序包,即使有设备正在使用它。
      /reboot - 根据需要重新启动系统以完成此操作。

    示例:
      删除驱动程序包:
        pnputil /delete-driver oem0.inf
      强制删除驱动程序包:
        pnputil /delete-driver oem1.inf /force

  /export-driver <oem#.inf | *> <目标目录>

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

    示例:
      导出驱动程序包:
        pnputil /export-driver oem6.inf .
      导出所有驱动程序包:
        pnputil /export-driver * c:\backup

  /enum-drivers

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

    示例:
      枚举所有 OEM 驱动程序包:
        pnputil /enum-drivers

  /disable-device <instance ID> | /deviceid <device ID> [/reboot]

    禁用系统上的设备。
      /deviceid <device ID> - 禁用带匹配设备 ID 的所有设备。
      /reboot - 根据需要重新启动系统以完成此操作。
    示例:
      禁用设备:
        pnputil /disable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
      禁用具有特定硬件/兼容 ID 的所有设备:
        pnputil /disable-device /deviceid "USB\Class_03"
  /enable-device <instance ID> | /deviceid <device ID> [/reboot]

    启用系统上的设备。
      /deviceid <device ID> - 启用带匹配设备 ID 的所有设备。
      /reboot - 根据需要重新启动系统以完成此操作。
    示例:
      启用设备:
        pnputil /enable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
      启用具有特定硬件/兼容 ID 的所有设备:
        pnputil /enable-device /deviceid "USB\Class_03"
  /restart-device <instance ID> | /deviceid <device ID> [/reboot]

    重启系统上的设备。
      /deviceid <device ID> - 重启带匹配设备 ID 的所有设备。
      /reboot - 根据需要重新启动系统以完成此操作。
    示例:
      重启设备:
        pnputil /restart-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
      重新启动具有特定硬件/兼容 ID 的所有设备:
        pnputil /restart-device /deviceid "USB\Class_03"
  /remove-device <instance ID> | /deviceid <device ID> [/subtree] [/reboot]

    尝试从系统中删除设备。
      /deviceid <device ID> - 删除带匹配设备 ID 的所有设备。
      /subtree - 删除整个设备子树,包括任何子设备。
      /reboot - 根据需要重新启动系统以完成此操作。
    示例:
      删除设备:
        pnputil /remove-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"
      删除具有特定硬件/兼容 ID 的所有设备:
        pnputil /remove-device /deviceid "USB\Class_03"
  /scan-devices [/instanceid <实例 ID>] [/async]

    扫描系统以查找任何设备硬件更改。
      /instanceid <实例 ID> - 在设备子树中扫描更改。
      /async - 异步扫描更改。

    示例:
      扫描设备:
        pnputil /scan-devices

  /enum-devices [/connected | /disconnected] [/instanceid <实例 ID>]
                [/class <name | GUID>] [/problem [<code>]] [/deviceids]
                [/relations] [/drivers]

    枚举系统上的所有设备。
      /connected | /disconnected - 按连接的设备筛选或
                                   按断开连接的设备筛选。
      /instanceid <实例 ID> - 按设备实例 ID 筛选。
      /class <名称 | GUID> - 按设备类名称或 GUID 筛选。
      /problem [<代码>] - 按出现问题的设备筛选或
                          按特定问题代码筛选。
      /bus [<name | GUID>]-显示总线枚举器名称和总线类型 GUID 或
                             按总线枚举器名称或总线类型 GUID 筛选。
      /deviceids-显示硬件/兼容 ID。
      /relations - 显示父级和子级设备关系。
      /drivers - 显示匹配的驱动程序和已安装的驱动程序。
      /stack-显示设备堆栈信息。
      /interfaces - 显示设备接口。
      /properties - 显示所有设备属性。

    示例:
      仅枚举系统上已连接的设备:
        pnputil /enum-devices /connected
      枚举具有特定实例 ID 的设备:
        pnputil /enum-devices /instanceid "ACPI\PNP0A08\1"
      枚举具有特定类的所有设备:
        pnputil /enum-devices /class Display
        pnputil /enum-devices /class {4d36e97d-e325-11ce-bfc1-08002be10318}
      枚举具有特定问题代码的所有设备:
        pnputil /enum-devices /problem 28
        pnputil /enum-devices /problem 0xA
      枚举具有特定总线的所有设备:
        pnputil /enum-devices /bus PCI
        pnputil /enum-devices /bus {c8ebdfb0-b510-11d0-80e5-00a0c92542e3}
      枚举具有问题的所有设备并显示硬件/兼容 ID:
        pnputil /enum-devices /problem /deviceids

  /enum-interfaces [/enabled | /disabled] [/class <GUID>]

    枚举系统上的所有设备接口。
      /enabled | /disabled - 按启用的接口筛选或
                             按禁用的接口筛选。
      /class <GUID> - 按接口类 GUID 筛选。

    示例:
      仅枚举系统上的已启用接口:
        pnputil /enum-interfaces /enabled
      枚举具有特定接口类 GUID 的所有接口:
        pnputil /enum-interfaces /class {884b96c3-56ef-11d1-bc8c-00a0c91405dd}

  /?

    显示使用情况屏幕。


pnputil 命令在初级、中级和高级应用方面的示例:

初级应用实例:

  1. 安装驱动程序

    bashCopy Code
    pnputil -i -a <驱动程序路径>

    例如:

    bashCopy Code
    pnputil -i -a C:\Drivers\Driver.inf
  2. 列出已安装的驱动程序

    bashCopy Code
    pnputil -e

中级应用实例:

  1. 卸载驱动程序

    bashCopy Code
    pnputil -f -d <驱动程序名称>

    例如:

    bashCopy Code
    pnputil -f -d oem0.inf
  2. 导出已安装的驱动程序

    bashCopy Code
    pnputil -e -o <目录>

    例如:

    bashCopy Code
    pnputil -e -o C:\Backup\Drivers

高级应用实例:

  1. 驱动程序回滚

    bashCopy Code
    pnputil -f -d <当前驱动程序名称>
    pnputil -i -a <旧版本驱动程序路径>
  2. 离线驱动程序管理

    bashCopy Code
    pnputil -i -a <驱动程序路径>

    在没有网络连接的环境中,使用本地路径安装驱动程序。

  3. 批量驱动程序管理: 结合脚本或者管理工具,批量执行安装、卸载或者导出操作。

  4. 驱动程序更新策略: 结合定期检查和更新驱动程序的脚本,确保系统始终使用最新的、稳定的驱动程序版本。

  5. 驱动程序备份和恢复: 结合备份工具,定期备份系统中的驱动程序,并在需要时恢复到其他计算机或者新安装的系统中。

这些示例展示了 pnputil 命令在不同应用场景下的使用方法,从初级到高级逐步展示了其灵活性和实用性


批量执行安装驱动程序可以通过编写简单的脚本来实现。下面是一个示例脚本,演示如何使用 pnputil 命令批量安装驱动程序:

bashCopy Code
@echo off
setlocal enabledelayedexpansion

set "driver_folder=C:\Drivers"
set "log_file=install_log.txt"

echo Installing drivers from %driver_folder%...

rem 清空日志文件
echo. > %log_file%

rem 遍历驱动程序文件夹
for %%f in ("%driver_folder%\*.inf") do (
    echo Installing %%~nxf...
    pnputil -i -a "%%f" >> %log_file% 2>&1
    if !errorlevel! equ 0 (
        echo Installation of %%~nxf successful.
    ) else (
        echo Installation of %%~nxf failed. See %log_file% for details.
    )
)

echo All drivers installed. See %log_file% for details.

endlocal

你可以将以上代码保存为批处理文件(.bat),然后在包含驱动程序的文件夹中运行它。该脚本将遍历指定文件夹中的所有 .inf 文件,并使用 pnputil 命令逐个安装驱动程序,并记录安装结果到日志文件中。


当与其他命令结合使用时,pnputil 命令可以提供一系列功能,从简单的驱动程序管理到复杂的系统维护和故障排除。下面是初级、中级和高级应用实例:

初级应用实例:

  1. 与 findstr 结合查找特定驱动程序
    bashCopy Code
    pnputil -e | findstr "DeviceName"
    这将列出包含 "DeviceName" 的驱动程序信息。

中级应用实例:

  1. for 循环结合批量删除旧版本驱动程序

    bashCopy Code
    for /f "tokens=2 delims=: " %%d in ('pnputil -e ^| findstr "Published by"') do (
        pnputil -f -d %%d
    )

    这将批量删除由特定发行商发布的驱动程序。

  2. xcopy 结合备份已安装的驱动程序

    bashCopy Code
    xcopy /s /i /y "%SystemRoot%\System32\DriverStore\FileRepository" "C:\Backup\Drivers"

    这将备份系统中的所有驱动程序到指定的备份目录。

高级应用实例:

  1. PowerShell 结合创建自动化的驱动程序更新脚本

    powershellCopy Code
    $drivers = pnputil -e
    foreach ($driver in $drivers) {
        if ($driver -like "*outdated*") {
            # 执行驱动程序更新操作
            pnputil -i -a $driver
        }
    }

    这将使用 PowerShell 脚本自动检测并更新过时的驱动程序。

  2. Task Scheduler 结合创建定期的驱动程序维护任务: 在 Windows 任务计划程序中创建一个任务,定期执行包含 pnputil 命令的脚本,以确保系统驱动程序的及时更新和维护。

这些示例展示了 pnputil 命令与其他命令结合使用的不同场景,从简单的查找和备份到自动化的驱动程序管理和系统维护。


PowerShell 脚本结合 pnputil 命令进行批量导入驱动程序的高级应用示例:

powershellCopy Code
# 设置驱动程序文件夹路径
$driverFolder = "C:\Drivers"

# 获取驱动程序文件夹中的所有 .inf 文件
$infFiles = Get-ChildItem -Path $driverFolder -Filter "*.inf" -File

# 遍历每个 .inf 文件并导入驱动程序
foreach ($infFile in $infFiles) {
    try {
        # 导入驱动程序
        pnputil.exe /add-driver $infFile.FullName /install
        Write-Host "Successfully imported and installed $($infFile.Name)"
    }
    catch {
        Write-Host "Failed to import or install $($infFile.Name): $_" -ForegroundColor Red
    }
}

这段 PowerShell 脚本将执行以下操作:

  1. 指定驱动程序文件夹的路径。
  2. 使用 Get-ChildItem 获取驱动程序文件夹中所有的 .inf 文件。
  3. 使用 foreach 循环遍历每个 .inf 文件,并尝试使用 pnputil.exe 导入和安装驱动程序。
  4. 如果成功导入和安装,则输出成功消息;如果失败,则输出错误消息。

你可以将这段脚本保存为 .ps1 文件,然后在 PowerShell 中执行,以批量导入驱动程序。这种方法特别适用于需要自动化安装多个驱动程序的情况,例如在大规模部署或系统维护中。


 

根据实际需求定制 DPInst64 命令的使用方式。以下是一些常用参数的解释:

  • /U INF-file:卸载指定的驱动程序包(INF 文件)。
  • /S | /Q:静默模式。抑制设备安装向导和操作系统弹出的任何对话框。
  • /LM:传统模式。接受未签名的驱动程序包和丢失文件的包。这些包将无法在最新版本的 Windows 上安装。
  • /P:若要安装的驱动程序包不比当前安装的驱动程序更好,则提示。
  • /F:如果要安装的驱动程序包不比当前安装的驱动程序更好,则强制安装。
  • /SH:扫描硬件以匹配设备,仅复制和安装存在设备的驱动程序。仅适用于即插即用驱动程序。
  • /SA:抑制通常为每个驱动程序包创建的添加/删除程序条目。
  • /A:全部安装或全部不安装。
  • /PATH Path:在给定路径下搜索驱动程序包。
  • /EL:启用 XML 文件中未明确列出的所有语言。
  • /L LanguageID:尝试在所有用户界面中使用给定的语言。用于本地化测试很有用。
  • /SE:抑制最终用户许可协议。
  • /C:将日志输出转储到附加的控制台(适用于 Windows XP 及更高版本)。
  • /D:在卸载时删除驱动程序二进制文件。
  • /SW:抑制设备安装向导,操作系统可能仍会弹出用户对话框。
  • /? | /h | /help:显示帮助信息。

 


DPInst64.exe:安装和卸载驱动程序包。
默认情况下,该工具会搜索当前目录并尝试安装找到的所有驱动程序包。

用法: DPInst64.exe [/U INF-file][/S | /Q][/LM][/P][/F][/SH][/SA][/A][/PATH Path][/EL][/L LanguageID][/C][/D][/LogTitle Title][/SW][/? | /h | /help]

/U INF-file    卸载驱动程序包(INF文件)。
/S | /Q        静默模式。抑制设备安装向导和操作系统弹出的任何对话框。
/LM    传统模式。接受未签名的驱动程序包和丢失文件的包。这些包将无法在最新版本的Windows上安装。
/P     如果要安装的驱动程序包不比当前驱动程序更好,则提示。
/F     如果要安装的驱动程序包不比当前驱动程序更好,则强制安装。
/SH    扫描匹配设备的硬件,仅为存在设备的驱动程序复制并安装。仅适用于即插即用驱动程序。
/SA    抑制通常为每个驱动程序包创建的“添加/删除程序”条目。
/A     安装全部或不安装。
/PATH Path     在给定路径下搜索驱动程序包。
/EL    启用XML文件中未明确列出的所有语言。
/L LanguageID          尝试在所有用户界面中使用给定的语言。用于本地化测试很有用。
/SE    抑制最终用户许可协议。
/C     将日志输出转储到附加的控制台(Windows XP及更高版本)。
/D     卸载时删除驱动程序二进制文件。
/SW    抑制设备安装向导,操作系统可能仍会弹出用户对话框。
/? | /h | /help        显示此帮助信息。

devcon /?

设备控制台帮助:
devcon [-r] [-m:\<machine>] <command> [<arg>...]
-r           仅在需要重新启动时才重新启动系统。
<machine>    指定远程计算机。
<command>    指定一个 Devcon 命令(请参阅下面的命令列表)。
<arg>...     一个或多个修改命令的参数。
要获取特定命令的帮助,请输入:devcon help <command>

classfilter          添加、删除和重新排序类过滤器。

classes              列出所有设备安装类。

disable              禁用设备。

driverfiles          列出设备的已安装驱动程序文件。

drivernodes          列出设备的驱动程序节点。

enable               启用设备。

find                 查找设备。

findall              查找设备,包括当前未连接的设备。

help                 显示 Devcon 帮助信息。

hwids                列出设备的硬件 ID。

install              手动安装设备。

listclass            列出设置类中的所有设备。

reboot               重新启动本地计算机。

remove               移除设备。

rescan               扫描新硬件。

resources            列出设备的硬件资源。

restart              重新启动设备。

sethwid              修改列出的根枚举设备的硬件 ID。

stack                列出设备的预期驱动程序堆栈。

status               列出设备的运行状态。

update               手动更新设备。

updateni             手动更新设备(非交互式)。

dp_add               添加(安装)第三方(OEM)驱动程序包。

dp_delete            删除第三方(OEM)驱动程序包。

dp_enum              列出在此计算机上安装的第三方(OEM)驱动程序包。

posted @ 2024-03-07 08:55  suv789  阅读(548)  评论(0编辑  收藏  举报