カテゴリー
ソフトウェア

Windows11 Bluetooth Device の再起動の自動化

はじめに

 MacBook Air (2020, Intel) Bootcamp で Windows11 を使っているのですが、Bluetooth デバイスがうまく初期化できていないようで、Bluetooth 接続のマウスが起動直後に使えない現象に遭遇しました。
 調べていくと、システムデバイス – Broadcom Bluetooth contrller Over PCIe Device を一度無効化して、再度有効化することで正常に使用できるようになることを確認しました。
 Windowsを起動する度、この作業をするのは億劫なので、自動的にやってもらうようにしました。今回、この件についてまとめます。

図1. 問題のある Bluetooth デバイス

概要

 大まかな手順は下記のとおりです。

  1. Bluetooth コントローラーを無効化・有効化するスクリプトを PowerShell で記述する
  2. 上記スクリプトをコマンドプロンプトで実行できるようにバッチファイルを作成する
  3. 上記バッチファイルをタスクスケジューラーに登録する

 今回使用するツールの一覧を記載します。この画面は 「スタート」→ポップアップ右上「すべてのアプリ」→「Windows ツール」から開くことができます。

図2. 本投稿で使用するツール

PowerShell スクリプト

 下記スクリプトを \Users\Public\startup\resetbluetooth.ps1 として保存します。

$DeviceID = (Get-PnpDevice -FriendlyName "Broadcom Bluetooth controller Over PCIe Device").InstanceID
Disable-PnpDevice -InstanceID $DeviceID -Confirm:$false
Enable-PnpDevice -InstanceID $DeviceID -Confirm:$false

目的のデバイスの名称 Broadcom Bluetooth controller Over PCIe Device から $DeviceID を取得して、このデバイスを無効化してから再度有効化します。どちらの操作も本当に実行するか、と聞いてくる処理なので、この確認をしないよう -Confirm:$false を指定しています。

バッチファイル

 PowerShell スクリプトはデフォルトではスクリプトの実行をしないよう Restricted に設定されています。このため、一時的に実行を許可するため Bypass に設定してから PowerShell スクリプトを実行、その後また元に戻す、という手順でこの問題を回避します。

 このバッチファイルも PowerShell スクリプトと同じディレクトリに \Users\Public\startup\startup.cmd として保存します。

PowerShell -Command "Set-ExecutionPolicy -ExecutionPolicy Bypass"
PowerShell -File "\Users\Public\startup\resetbluetooth.ps1"
PowerShell -Command "Set-ExecutionPolicy -ExecutionPolicy Restricted"

 この時点で、バッチファイルが正常に動作するか、コマンドプロンプトを開いて確認しておきましょう。コマンドプロンプトは「管理者として実行」から起動してください。下記のように、プロンプトに戻ってくれば成功です。

図3. コマンドプロンプトでバッチファイルを実行

タスクスケジューラー

 次の PowerShell スクリプトを実行して、タスクスケジューラーにバッチファイルの実行設定を追加します。PowerShell も「管理者として実行」から起動してください。

$STAction = New-ScheduledTaskAction -Execute 'C:\Users\Public\startup\startup.cmd'
$STTrigger = New-ScheduledTaskTrigger -AtStartup
$STTrigger.Delay = 'PT10S'
$STSSet = New-ScheduledTaskSettingsSet
$STPrin = New-ScheduledTaskPrincipal -GroupId "BUILTIN\Administrators" -RunLevel Highest
$task = New-ScheduledTask -Action $STAction -Principal $STPrin -Trigger $STTrigger -Settings $STSSet
Register-ScheduledTask -TaskName 'Common Startup Task' -InputObject $task

 無事登録できると、タスクスケジューラーにこのタスクが追加されている事を確認できます。

図4. ScheduledTask にタスクを追加

OS 起動&ログオン後

 デバイスマネージャーで確認すると、Bluetooth が無事起動して Bluetooth マウスも問題なく動作するようになりました。

TODO

  • ScheduledTask のタブ「全般」にある「ユーザーがログオンしているかどうかにかかわらず実行する」にしたい
  • ScheduledTask のタブ「条件」にある「コンピューターを AC 電源で使用している場合のみタスクを開始する」を OFF にしたい

おわりに

 ScheduledTask の設定について、起動直後は Bluetooth コントローラーが準備できていないようで、無効化・有効化がうまくできませんでした。ログオン後、10秒ほど経ってから実行することで、Bluetooth コントローラーの再起動が正常に完了するようになりました。

参考記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください