WindowsのPowerShellからBluetoothデバイスを調べる
ASCII.jp / 2025年1月19日 10時0分
Bluetoothに関連する情報をPowerShellで扱う
今回は、Bluetoothに関連する情報をPowerShellで扱う方法を考える。GUIでは「設定」→「Bluetoothとデバイス」→「デバイス」とすることで、接続されているデバイスを一覧表示できる。
コマンドラインからは、以下のコマンドでページを開くことがてきる。
bthprops.cpl start ms-settings:connecteddevices
「bthprops.cpl」は、コントロールパネルのアイコンに対応するプログラムで、「C:\Windows\System32」にある。もう1つは、設定アプリのURI起動である。
「設定」→「Bluetoothとデバイス」→「デバイス」では、注意して見ないと、Bluetoothデバイスかどうかを判別できない。デバイス名の下に「ペアリング済み」と表示されているのがBluetoothデバイスである。
深い知識を持たない一般ユーザーに、BluetoothデバイスとUSBデバイスを区別する作業は不要、というスタンスがここからは感じられる。Windows 8以降、コントロールパネルと設定が分離してから、Windowsには、このように詳細を伏せるところが見られるようになった。
こうしたことに興味がないユーザーには良いのだろうが、情報を必要とするユーザーは、大量の情報が表示される「デバイスマネージャー」やコマンドラインなどを使わざるを得なくなる。
さて、Bluetoothは通信方式なのだが、Windowsの中では、「デバイス」としての静的な情報と、通信/プロトコルとしての動的な情報がある。前者は、どんなデバイスが登録(ペアリング)されているのか、といったWindowsのデバイスシステムの中の情報である。後者については、APIを使い、プロトコルに応じた動き、たとえば、Bluetoothのアドバタイズを受信するといった処理となる。
後者については、プログラミングが関わるため、別の機会に解説することにしたい。
PnPデバイスからBluetooth関連のデバイスを取り出す
PowerShellで、デバイス情報を扱うには「Get-PnpDevice」コマンドを使うのが定石である。Windowsが認識しているすべてのデバイスは、PnpDeviceとして登録されている。
ただし、大量のデバイスがあるため、Where-Object(エイリアスは「?」)を使って、目的のものだけを取り出すことを考える。これが、PowerShellでのデバイス情報処理の基本である。
Bluetoothデバイスのクラス(Class)は「Bluetooth」だが、出力させてみると、Bluetooth関連のサービスなども列挙される。物理的なBluetoothデバイスを探したければ、以下のコマンドを使う。
Get-PnpDevice | ? Class -eq "Bluetooth" | ? CompatibleID -like "*GENERIC*DEVICE*"
このとき「CompatibleID」が「{BTHENUM\GENERIC_DEVICE}」となっているものはClassic Bluetoothデバイス(Bluetooth BR/EDR)で、「{BTHLE\GenericDevice}」になっているものが、Bluetooth LE(Low Energy)デバイスだ。1つのデバイスが同時に両方の特性を持っていることもあるので注意してほしい(Nameなどが同一)。
実行環境によっては、InstanceIDの後半が省略されて、すべて表示されないことがある。そのような場合には、
Get-PnpDevice | ? Class -eq "Bluetooth" | ? CompatibleID -like "*GENERIC*DEVICE*" | ft -AutoSize
とする。
列挙したBluetoothデバイスのプロパティにある「InstanceID」を使うことで、PnpDeviceのプロパティを入手できる。それには、
Get-PnpDeviceProperty -InstanceId <InstanceID>
とする。
大量の情報が出力されるが、重要なものとして「DEVPKEY_DeviceContainer_Category」「DEVPKEY_Device_HardwareIds」がある。前者はデバイスのカテゴリ、後者にはBluetoothデバイスのMACアドレスが含まれている。
なお、Get-PnpDevicePropertynの出力する情報は、レジストリの「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\BTHENUM」(Bluetooth Classicデバイス)、「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\BTHLE」(Bluetooth LEデバイス)にあるものと一部共通している。
PnpDevicePropertyを比較する
Get-PnpDevicePropertyで、デバイス情報をオブジェクトとして撮り出せるため、これを変数に記録し、Compare-Objectコマンド(https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/compare-object?view=powershell-7.4)で比較することで、その変化を調べられる。具体的には、以下の手順を使う。
$S1=Get-PnpDeviceProperty -InstanceId <InstanceID> #デバイスを切断するなど、デバイスの状態を変える操作をする $S2=Get-PnpDeviceProperty -InstanceId <InstanceID> Compare-Object $S1 $S2 -Property KeyName,Data
Compare-Objectは、2つのオブジェクトを比較し違いを表示するコマンド。複数のプロパティを持つオブジェクトの場合、比較対象とするプロパティを指定する必要がある。ここでは、PnpDevicePropertyのKeyNameとDataプロパティを指定した。
Classic Bluetoothデバイスを接続すると、PnpDeviceProperty「{83DA6326-97A6-4088-9453-A1923F573B29} 15」がFalseとなり、接続した時間(UTC)が「DEVPKEY_Bluetooth_LastConnectedTime」に記録されることがわかる。
PnpDevicePropertyを状態変化の前後で変数に記録して比較することで、プロパティの変化を調べることもできる。今回は、Bluetoothを例に解説したが、基本的な考えは、PnpDevice全般に適用可能だ。
この記事に関連するニュース
-
Windows Terminal ベスト設定 第18回「Sixcelグラフィックス基礎編」
マイナビニュース / 2025年1月17日 16時17分
-
「Windows 11 2024 Update(バージョン24H2)」の既知の不具合まとめ【2025年1月14日現在】
ITmedia PC USER / 2025年1月14日 18時5分
-
マイクロソフト、Windows 10に新しい「Outlook」を自動インストール
ASCII.jp / 2025年1月14日 16時25分
-
窓辺の小石 第198回 Excel's Run
マイナビニュース / 2025年1月10日 19時54分
-
窓辺の小石 第197回 Exif Exit
マイナビニュース / 2025年1月3日 12時47分
ランキング
-
1ブランド刷新のFMV、“心地よさ”目指したZ世代向け13.3型ノートPC「Note C」実機を見た
マイナビニュース / 2025年1月17日 16時57分
-
2おのののか、娘がインフルで突然けいれん 震え止まらない娘に気が動転「生きた心地がしなかった」
ねとらぼ / 2025年1月17日 13時53分
-
3「テレビが壊れるから駄目!」←親がファミコンを禁止…“うわさ話”の真相は?
マグミクス / 2025年1月18日 18時25分
-
4セゾンカード、不正懸念の顧客に「ご利用内容確認のお願い」動画送信へ
ITmedia NEWS / 2025年1月17日 16時56分
-
5「AI PC」の販売比率が15%突破、25年には50%に――日本HPがAI対応をさらに拡充する製品群を披露
ITmedia PC USER / 2025年1月17日 14時30分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください