从命令行在Windows 10中启用/禁用设备

时间:2017-11-28 11:14:11

标签: windows batch-file windows-10 device-manager devcon

我有一个特定的硬件,我想在每次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设备管理器并手动禁用并重新启动启用此设备。

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

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

3 个答案:

答案 0 :(得分:4)

PnPUtil也可以执行此工作,无需下载SDK或其他任何相关内容。 自Vista开始包含在Windows中:

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

答案 1 :(得分:2)

由于安全性和改进,在Windows 10中,当然Windows Vista以及User 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 :(得分:0)

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

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

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

就我而言,当计算机在关机或睡眠后启动时,我还需要运行此脚本。我授予了上述脚本合理的权限,并使用Task Scheduler以其术语在登录和启动时运行它: https://www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log.html?ltr=T