連載
» 2018年04月03日 05時00分 公開

山市良のうぃんどうず日記(123):数日ごとに使えなくなるBluetooth、Windows 10にこれからも働いてもらうために…… (1/2)

筆者の手元にあるノートPCの1台は、購入してから5年以上がたちますが、最新のWindows 10が動いていますし、ハードウェアが致命的に壊れるまではこのまま使い続けるつもりです。しかし、難点が1つ。Bluetoothデバイスがたびたび使用不能になることです。問題を解消する方法はあるのですが、数日たつと再現するのです。さて、どうしたものでしょう。

[山市良,テクニカルライター]
「山市良のうぃんどうず日記」のインデックス

山市良のうぃんどうず日記

デバイスのアンインストールと再スキャンで解消するのは分かっているけど……

 問題のノートPCは、64ビットWindows 7 Professionalのプリインストールの企業向けモデルで、その後、Windows 8、Windows 8.1、Windows 10へとアップグレードしてきました。たびたびBluetoothが正常に機能しなくなる以外は、特にハードウェアやソフトウェアの互換性に関連する問題は発生していません。

 日常的に使っているBluetoothデバイスはマウスですし、主にデスクトップPCからリモートデスクトップ接続で使っているので、Bluetoothが機能しなくても筆者にとってはさほど重大なことではないのですが、タスクバーの「通知領域」や「アクションセンター」にBluetoothアイコンが表示されていないことで気が付きます。問題が発生した状態のままにしておくのは、やはり気になるものです。

 この問題は、以前はたまに発生していたように思っていたのですが(毎回確認していたわけではありませんが)、最近では完全なシャットダウン状態からの起動時にほぼ確実に再現します。

 問題発生時の回復方法は分かっています。「デバイスマネージャー」スナップイン(Devgmt.msc)を開いて、[!]マーク付きで問題発生を示しているBluetoothデバイスをアンインストールし、ハードウェア変更のスキャンを実行すれば、たいていは問題が解消し、ペアリング済みのデバイスのドライバも復元されます(画面1)。アンインストール時にWindowsの再起動を要求されることもありますが、再起動後は全てのBluetoothデバイスとペアリング済みデバイスが復活しています。

画面1 画面1 シャットダウン状態から起動すると、ほぼ確実にこの状態でBluetoothが有効にならない。デバイスをアンインストールして再スキャンすれば、たいてい問題は解消する

 筆者のノートPCのWindows 8向けのドライバは「Dell Wireless 1702 802.11 b/g/n, Bluetooth v3.0+HS Driver」、Windows 8.1以降はWindows Updateから提供される「Qualcomm Atheros AR3011 Bluetooth 3.0」に置き換わりました。

 実は、Windows 8.1のときも、Windows Update提供のドライバで同じような問題を経験しています。そのときは、Windows 8のドライバに戻すことで使い続けることができました。Windows 10では、この方法で問題を解消することはできませんでした。なお、このノートPCのモデルのメーカーによるOSのサポートはWindows 7とWindows 8のみで、Windows 8.1以降はサポート対象外であり、Windows 8.1やWindows 10対応の新しいドライバはもちろん提供されていません。

 インターネットを検索してみると、同じモデル、同じデバイスを持つ別メーカーのノートPCでも同様の問題を抱えている人がいるようですが、根本的な解決策を見つけることはできませんでした。デバイスのアンインストールでその都度対処すればどうにかなるのですが、その操作が面倒です。簡単にできないかどうか考えてみました。

PnPデバイスの制御をPowerShellから――デバイスの無効化と有効化は効果なし

 デバイスのアンインストールや再スキャン操作を、デバイスマネージャーを使用せずにコマンドやスクリプトから実行できないものか、インターネット上を検索してみたところ、MicrosoftのTechNetブログにWindows 8およびWindows Server 2012がメインストリームのときに書かれた以下の記事を見つけました。

 USBやBluetoothに関係するプラグ&プレイ(PnP)環境では、当時(おそらく現在でも)、デバイスマネージャーのリッチな機能はGUI(グラフィカルユーザーインタフェース)を通してのみ利用可能であり、コンソール環境で動作するモードは提供されていないとのことです。この記事では、代替方法として、「PowerShellギャラリー」で公開されている「Device Management PowerShell Cmdlets」を紹介しています。

 Device Management PowerShell Cmdletsを利用すると、デバイスの無効化/有効化をPowerShellスクリプト(Disable-Device/Enable-Device)で実行できます。しかし、筆者のノートPCの問題は、デバイスの無効化/有効化では解消されません。デバイスマネージャーのGUIでできなかったのですから、試すまでもなくこのコマンドレットでもできないのですが、参考までにこんなこともできるということを示すために試してみました(画面2)。

画面2 画面2 Device Management PowerShell CmdletsのDisable-Device/Enable-Deviceコマンドレットを利用すると、PowerShellのコマンドラインやスクリプトからデバイスの無効化/有効化が可能。ただし、筆者の問題には役に立たない

ドライバの削除/再スキャンをdevcon.exeで――デバイスマネージャーと同じことができかも

 TechNetブログには、スクリプト化の手段として、他にもWindows Management Instrumentation(WMI)を操作するためのWMICやGet-WmiObject、Windows Driver Kit(WDK)などに含まれる「devcon.exe」、Windows Sysinternalsの「Coreinfo.exe」が紹介されています。この中で今回の問題解決に使えそうなのは、WDKツールのdevcon.exeです。

 以下のdevcon.exeのドキュメントを見ると、デバイスの列挙、ステータスの取得、デバイスの無効化/有効化、デバイスのインストール/アンインストール(削除)、デバイスドライバの更新、デバイスの再スキャンなど、デバイスマネージャーで行えることの多くをコマンドラインから実行できるようです。

 現在、devcon.exeはWindows 10用WDKのツール(Tools)の1つとして提供されています。以前、メーカー提供のドライバのインストーラーに単体で同梱されているのを見かけたことがあります。WDKをインストールするのは大げさですし、ディスク領域も結構消費しますので、筆者は仮想マシン環境に一時的にインストールして、devcon.exeだけをコピーしました。64ビットWindows 10なら「C:\Program Files (x86)\Windows Kits\10\Tools\x64\devcon.exe」にあります。

 特定のデバイスのステータス取得、アンインストール、ハードウェア変更の再スキャンは、次の一連のコマンドラインで実行できました(画面3)。

devcon hwids * > hwids.txt

devcon status "@インスタンスID"

devcon -r remove "@インスタンスID"

devcon rescan


画面3 画面3 devcon.exeツールを使用して、デバイスのアンインストール、再スキャンを実行し、Bluetoothの問題を解消できた

 最初のコマンドラインは、ローカルコンピュータで検出された全てのデバイスの「インスタンスID(出力の最初の項目)」「名前(Name)」「ハードウェアID(Hardware IDs)」「互換性ID(Compatible IDs)」を出力します。特定のデバイスを操作するために、このコマンドラインでそのデバイスのインスタンスIDを調べます。デバイス数が多いので、テキストファイル「hwids.txt」にリダイレクトしたものをメモ帳などで開いて検索します。

プロトタイプ版バッチを作ってみたけど、期待通りに機能しないことがある

 この一連のコマンドライン操作をバッチ化したしたものが、以下のプロトタイプ版「resetbt.cmd」です(リスト1)。

@ECHO OFF
C:\demo\devcon.exe status "@USB\VID_0CF3&PID_3002\6&3B0CF529&0&4" |findstr "running"
IF %ERRORLEVEL% == 0 GOTO END
SET /P YESNO="Do you want to reset this device ? (y/n): "
IF "%YESNO%"=="n" GOTO END
C:\demo\devcon.exe remove /r "@USB\VID_0CF3&PID_3002\6&3B0CF529&0&4"
C:\demo\devcon.exe rescan
:END
リスト1 プロトタイプ版「resetbt.cmd」

 このバッチのショートカットをデスクトップに置き、ショートカットのプロパティの「詳細設定」で「管理者として実行」をチェックします。デスクトップ上のショートカットをダブルクリックして実行することで、Bluetoothデバイスに問題があれば、リセットするかどうかをユーザーに問い合わせるというものです。

 サンプルバッチ「resetbt.cmd」がプロトタイプ版と言ったのは、うまくいかないケースがあるからです。デバイスマネージャーで[!]マークが付いた状態、つまりdevcon statusで「The device has the following problem...」と出力される状態では、このバッチはうまく機能します。

 しかし、デバイスマネージャーで[!]マークが付かず、devcon statusの出力は「Driver is running.」で、一見、正常に機能しているようでも、Bluetooth関連の他のデバイス(ペアリング済みデバイスや関連サービス)が存在せず、Windows 10からは「Bluetoothが無効です」と認識される場合がありました(画面4)。この状況を解消するのにもデバイスのアンインストールが必要なのですが、この場合はアンインストールのためにコンピュータの再起動が要求されました。

画面4 画面4 プロトタイプ版「resetbt.cmd」は、この状況を解消できない
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

「Windows 7」サポート終了 対策ナビ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。