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

概要
大まかな手順は下記のとおりです。
- Bluetooth コントローラーを無効化・有効化するスクリプトを PowerShell で記述する
- 上記スクリプトをコマンドプロンプトで実行できるようにバッチファイルを作成する
- 上記バッチファイルをタスクスケジューラーに登録する
今回使用するツールの一覧を記載します。この画面は 「スタート」→ポップアップ右上「すべてのアプリ」→「Windows ツール」から開くことができます。

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

タスクスケジューラー
次の 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
- New-ScheduledTaskAction Document
- New-ScheduledTaskTrigger Document
- New-ScheduledTaskSettingsSet Document
- New-ScheduledTaskPrincipal Document
- New-ScheduledTask Document
- Register-ScheduledTask Document
無事登録できると、タスクスケジューラーにこのタスクが追加されている事を確認できます。

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

TODO
- ScheduledTask のタブ「全般」にある「ユーザーがログオンしているかどうかにかかわらず実行する」にしたい
- ScheduledTask のタブ「条件」にある「コンピューターを AC 電源で使用している場合のみタスクを開始する」を OFF にしたい
おわりに
ScheduledTask の設定について、起動直後は Bluetooth コントローラーが準備できていないようで、無効化・有効化がうまくできませんでした。ログオン後、10秒ほど経ってから実行することで、Bluetooth コントローラーの再起動が正常に完了するようになりました。