从命令行启用/禁用 Windows 10 中的设备 [关闭]

Posted

技术标签:

【中文标题】从命令行启用/禁用 Windows 10 中的设备 [关闭]【英文标题】:Enabling/disabling a device in Windows 10 from command line [closed] 【发布时间】:2018-05-11 19:52:16 【问题描述】:

我有一个特定的硬件,我想在每次 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 程序无法正常工作,直到我转到 Windows 设备管理器并手动禁用并重新启用此设备。

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

有没有办法在我的批处理脚本中正确执行此操作,该脚本应在 Windows 启动时自动运行?

【问题讨论】:

我假设您需要使用 Windows 10 安全“改进”Run as administratordevcon.exe,而不仅仅是管理员组的成员。此外,您需要确保devcon.exe 与批处理文件"%~dp0devcon.exe" 一起在%PATH%devcon 中,或者使用其完整路径"C:\Tools\devcon.exe" 调用。 啊,是的,devcon.exe 与批处理脚本在同一个文件夹中...您能澄清一下我如何以管理员身份运行 devcon.exe 吗? 右键单击批处理文件并从上下文菜单中选择Run as administrator 如果我的用户是管理员,这不应该默认“以管理员身份”运行吗?重新启动后,如何告诉 Windows 以“管理员身份”运行它?如果我“以管理员身份”运行批处理文件,devcon.exe 是否也会“以管理员身份”运行???抱歉所有这些问题,但我不太了解这个令人惊叹的 Windows 选项:/ pnputil /disable-device "" pnputil /enable-device "" pnputil /restart-device "" 【参考方案1】:

由于Windows 10 的安全性“改进”,当然还有Windows VistaUser Account Control 的引入,我认为您需要Run as administrator,而不仅仅是管理员组的成员。

一般应该理解为Run as administrator 表示Run as the user with the account name Administrator 而不是Run as any user who holds membership of the Administrators group

对于Run as administrator,右键单击批处理文件并从上下文菜单中选择Run as administrator

还有其他以管理员身份运行的方式。

您可以使用自升式批处理文件,该文件通常使用PowerShellWSH 辅助函数。 您可以使用Task Scheduler 并选择适当的触发器和帐户信息,(可能使用 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*"

在上述所有情况下,请注意您的示例中缺少的星号

【讨论】:

【参考方案2】:

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

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

我发现使用 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

【讨论】:

【参考方案3】:

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

https://docs.microsoft.com/de-de/windows-hardware/drivers/devtest/pnputil

【讨论】:

您如何使用 pnputil 禁用/启用设备? Windows 10 版本的 PnPUtil(至少)包括启用/禁用:docs.microsoft.com/de-de/windows-hardware/drivers/devtest/… docs.microsoft.com/de-de/windows-hardware/drivers/devtest/…设备实例ID:设备管理器-双击项目-详细信息-设备实例路径 @MarkSowul:pnputil /disable-device <instance ID>/enable-devicerestart-device 也可用。所有带有pnputil /? 的命令。

以上是关于从命令行启用/禁用 Windows 10 中的设备 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从命令行启用/禁用网络连接

windows 设备禁用

怎样用命令行禁用网卡

怎样用命令行禁用网卡

在 Windows XP/7/8 中获取有关音频设备启用/禁用通知的方法

如何以编程方式启用/禁用网络接口? (Windows XP)