web-dev-qa-db-ja.com

コマンドラインからの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

そもそもdevcon.exeがこのための適切なアプリケーションであるかどうかはわかりません。Windowsスクリプトを記述した経験がないためです。

ただし、runMyWindows.exeプログラムはWindowsデバイスマネージャーに移動して手動でこのデバイスを無効にしてから再度有効にするまで正常に機能しないため、これらのコマンドではうまく機能しないことがわかりました。

「管理者」グループに属するこのマシンには1人のユーザーしかいないので、.batファイルをダブルクリックする以外に特別な方法でこのスクリプトを実行していません。再起動の場合は、スタートアップフォルダ(C:\Users\oxxo\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)。

Windowsの起動時に自動的に実行されるバッチスクリプト内でこれを正しく行う方法はありますか?

4
errata

Windows 10のセキュリティの「改善」のため、そして確かにWindows VistaUser Account Controlの導入以来、管理者グループのメンバーだけでなく、Run as administratorが必要になると思います。

通常、Run as administratorRun 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を選択します。

管理者として実行する他の方法もあります。

  • 通常、PowerShellまたはWSHヘルパー関数を使用する自己昇格バッチファイルを使用できます。
  • 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*"を使用して呼び出されました

上記のすべてのケースで、例にないアスタリスクに注意してください

3
Compo

このスレッドを読むほとんどの人は、他の回答はあまり役に立ちません。それは主に、質問内のスクリプトを管理者権限で実行する方法に関するものだからです。ここで暗黙の質問に答えようとします:

コマンドラインからデバイスを有効/無効にする

質問のように、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