在Windows 10中,如何通过命令行启用/禁用设备

22

我有一件特定的硬件需要在每次Windows重启时禁用和重新启用。我创建了一个批处理脚本来完成这个任务,并在此之后运行我的程序:

cd %~dp0
devcon.exe disable "PCI\VEN_1002&DEV_687F"
timeout /t 3
devcon.exe enable "PCI\VEN_1002&DEV_687F"

runMyWindows.exe --totally-not-virus

我不确定devcon.exe是否是一个合适的应用程序,因为我没有任何编写Windows脚本的经验。

然而,我已经注意到那些命令并不能完全完成任务,因为我的runMyWindows.exe程序在我手动禁用和重新启用该设备之前无法正常工作。

我在这台机器上只有一个用户,该用户属于"管理员"组,我没有以任何特殊方式运行此脚本,只是双击.bat文件,或者在重启的情况下,它是从启动文件夹(C:\Users\oxxo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)运行的。

有没有一种方法可以在我的批处理脚本中正确地完成这个任务,并且可以在Windows启动时自动运行?


我假设在Windows 10安全“改进”中,您需要以管理员身份运行devcon.exe,而不仅仅是成为管理员组的成员。此外,您需要确保devcon.exe要么与批处理文件一起放置在"%~dp0devcon.exe",要么在%PATH%中,或者使用其完整路径调用"C:\Tools\devcon.exe" - Compo
啊,是的,devcon.exe与批处理脚本在同一个文件夹中...你能否澄清一下如何在我的情况下以管理员身份运行devcon.exe - errata
右键单击批处理文件,从上下文菜单中选择“以管理员身份运行”。 - Compo
好的,所以,显然唯一的方法来运行这个作为用户名为Administrator的用户是右键单击并从上下文菜单中选择该选项?是这样吗?这意味着每次重新启动后都无法自动化此过程?? - errata
2
pnputil /disable-device "<DEVICE-ID>"pnputil /enable-device "<DEVICE-ID>"pnputil /restart-device "<DEVICE-ID>" - Nic Szerman
显示剩余5条评论
3个回答

28

PnPUtil也可以完成这项工作,无需下载任何SDK或其他相关内容。 自Vista以来已包含在Windows中:

https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/pnputil

示例

禁用由设备实例ID指定的设备:

pnputil /disable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"

启用由设备实例 ID 指定的设备:

pnputil /enable-device "USB\VID_045E&PID_00DB\6&870CE29&0&1"

如何使用pnputil 禁用/启用 设备? - Mark Sowul
2
Windows 10 版本的 PnPUtil(至少)包括启用/禁用功能:https://learn.microsoft.com/de-de/windows-hardware/drivers/devtest/pnputil-command-syntax - SpaceDog
3
设备实例 ID: 设备管理器 - 双击设备条目 - 详细信息 - 设备实例路径 - lovestackh343
1
@MarkSowul: pnputil /disable-device <instance ID>. /enable-devicerestart-device也可用。所有命令都在pnputil /?中。 - nicolaus-hee
我不喜欢这是最佳答案。它根本没有回答 OP 的问题。"安装第三方程序"不能替代"这是在 cmd/powershell/etc 中执行此操作的正确命令..." - GroggyOtter
显示剩余2条评论

16

大多数阅读此帖的人可能不会发现其他答案非常有用,因为它主要是关于如何以管理员权限运行问题中的脚本。我将在此尝试回答隐含的问题:

通过命令行启用/禁用设备

我发现最容易使用devcon.exe(6mb),就像问题中所述:

set HARDWARE_ID="PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"
devcon disable %HARDWARE_ID%
timeout /t 3
devcon enable %HARDWARE_ID%

devcon.exe需要管理员权限。

如何获取devcon

它是Windows驱动程序开发工具包的一部分。不幸的是,官方资源要求您下载1GB的SDK。我能够通过遵循这里的一个答案来绕过这个问题:https://superuser.com/questions/1002950/quick-method-to-install-devcon-exe

一旦您拥有了它,请确保devcon.exe在您的%PATH%上。我把我的放在了C:\Windows\System32\中。

查找要操作的设备的硬件ID

以管理员权限打开命令提示符并执行devcon hwids *,它将打印出所有设备及其对应的ID。这将产生大量输出。使用命令提示符的搜索功能找到您需要的内容。以下是我感兴趣的部分:

PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61\4&6AB551C&0&00E1
    Name: Intel(R) Wireless WiFi Link 4965AGN
    Hardware IDs:
        PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61
        PCI\VEN_8086&DEV_4229&SUBSYS_11018086
        PCI\VEN_8086&DEV_4229&CC_028000
        PCI\VEN_8086&DEV_4229&CC_0280
    Compatible IDs:
        PCI\VEN_8086&DEV_4229&REV_61
        PCI\VEN_8086&DEV_4229
        PCI\VEN_8086&CC_028000
        PCI\VEN_8086&CC_0280
        PCI\VEN_8086
        PCI\CC_028000
        PCI\CC_0280

选择一个足够具体的ID,并通过执行以下操作来检查其是否有效:

devcon find "PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"

如果只找到1个设备,并且它是您想要的设备,那么就没问题了。请注意,通常您需要用引号转义硬件ID。
奖励:在启动或开机时运行.bat脚本
在我的情况下,我还需要在计算机关机或休眠后启动时运行此脚本。我赋予上述脚本合理的权限,并使用任务计划程序在登录和启动时运行它,在其术语中: https://www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log.html?ltr=T

当我使用devcon禁用我的设备时,我会得到Disabled on reboot: Not all of 1 device(s) disabled, at least one requires reboot to complete the operation的提示。我是否没有办法了?有没有其他方法可以在不重启计算机的情况下禁用/启用该设备? - alelom
1
无论是devcon还是pnputil都需要我重新启动设备,这对我来说是不可接受的。唯一一个允许我通过命令行禁用/启用设备而无需重新启动的程序是DevManView! 请参见此SE答案。真是救命稻草! - alelom

8
由于Windows 10和自Windows Vista以来引入了用户账户控制,我认为您需要以管理员身份运行,而不仅仅是成为管理员组的成员,这是出于安全“改进”的考虑。
通常应该理解“以管理员身份运行”是指“以帐户名为管理员的用户身份运行”,而不是“以任何拥有管理员组成员身份的用户身份运行”。
要以管理员身份运行,请右键单击批处理文件,并从上下文菜单中选择“以管理员身份运行”。
还有其他以管理员身份运行的方法:
- 您可以使用自升级批处理文件,通常使用PowerShell或WSH辅助函数。 - 您可以使用任务计划程序并选择适当的触发器和帐户信息(可能使用SYSTEM帐户)。
此外,您需要确保DevCon.exe位于以下位置之一:
- 批处理文件旁边:“%~dp0DevCon.exe” Disable “PCI\VEN_1002&DEV_687F*” - 在%PATH%中定义的位置:DevCon Disable “PCI\VEN_1002&DEV_687F*” - 使用完整路径调用:“C:\Tools\DevCon.exe” Disable “PCI\VEN_1002&DEV_687F*”
在上述所有情况中,请注意您示例中缺少的星号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接