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

err*_*ata 14 windows batch-file device-manager devcon windows-10

我有一个特定的硬件,我想在每次 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
Run Code Online (Sandbox Code Playgroud)

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

但是,我注意到这些命令并不能很好地完成工作,因为runMyWindows.exe在我转到 Windows 设备管理器并手动禁用和重新启用此设备之前,我的程序无法正常工作。

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

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

Dom*_*kis 12

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

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

我发现使用 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%
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

devcon find "PCI\VEN_8086&DEV_4229&SUBSYS_11018086&REV_61"
Run Code Online (Sandbox Code Playgroud)

如果只找到 1 台设备,而且是您想要的设备,那就很好了。请注意,您通常希望用引号转义硬件 ID。

奖励:在启动或开机时运行 .bat 脚本

就我而言,我还需要在计算机在关机或睡眠后启动时运行此脚本。我给了上面的脚本合理的权限,并使用任务计划程序在登录和启动时运行它,在它的术语中:https : //www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log。 html?ltr=T


小智 12

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

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

  • https://learn.microsoft.com/de-de/windows-hardware/drivers/devtest/pnputil-examples 设备实例 ID:设备管理器 - 双击项目 - 详细信息 - 设备实例路径 (3认同)
  • Windows 10 版本的 PnPUtil(至少)包括启用/禁用:https://learn.microsoft.com/de-de/windows-hardware/drivers/devtest/pnputil-command-syntax (2认同)

Com*_*mpo 6

由于安全性的“改进” Windows 10,当然,自从Windows Vista引入以来,User Account Control我假设您需要Run as administrator,而不仅仅是成为管理员组的成员。

通常应该将其解读Run as administratorRun as the user with the account name Administratornot 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*"

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