数日ごとに使えなくなるBluetooth、Windows 10にこれからも働いてもらうために……:山市良のうぃんどうず日記(123)(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デバイスとペアリング済みデバイスが復活しています。
筆者のノート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がメインストリームのときに書かれた以下の記事を見つけました。
- Device Management PowerShell Cmdlets Sample ? An introduction[英語](Server and Cloud Partner and Customer Solutions Team Blog)
USBやBluetoothに関係するプラグ&プレイ(PnP)環境では、当時(おそらく現在でも)、デバイスマネージャーのリッチな機能はGUI(グラフィカルユーザーインタフェース)を通してのみ利用可能であり、コンソール環境で動作するモードは提供されていないとのことです。この記事では、代替方法として、「PowerShellギャラリー」で公開されている「Device Management PowerShell Cmdlets」を紹介しています。
- Device Management PowerShell Cmdlets(Microsoft TechNet PowerShellギャラリー)
Device Management PowerShell Cmdletsを利用すると、デバイスの無効化/有効化をPowerShellスクリプト(Disable-Device/Enable-Device)で実行できます。しかし、筆者のノートPCの問題は、デバイスの無効化/有効化では解消されません。デバイスマネージャーのGUIでできなかったのですから、試すまでもなくこのコマンドレットでもできないのですが、参考までにこんなこともできるということを示すために試してみました(画面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のドキュメントを見ると、デバイスの列挙、ステータスの取得、デバイスの無効化/有効化、デバイスのインストール/アンインストール(削除)、デバイスドライバの更新、デバイスの再スキャンなど、デバイスマネージャーで行えることの多くをコマンドラインから実行できるようです。
- Windows Device Console (Devcon.exe)[英語](Microsoft Hardware Dev Center)
- 日本語ドキュメント(旧サイト)
現在、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
最初のコマンドラインは、ローカルコンピュータで検出された全てのデバイスの「インスタンス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
このバッチのショートカットをデスクトップに置き、ショートカットのプロパティの「詳細設定」で「管理者として実行」をチェックします。デスクトップ上のショートカットをダブルクリックして実行することで、Bluetoothデバイスに問題があれば、リセットするかどうかをユーザーに問い合わせるというものです。
サンプルバッチ「resetbt.cmd」がプロトタイプ版と言ったのは、うまくいかないケースがあるからです。デバイスマネージャーで[!]マークが付いた状態、つまりdevcon statusで「The device has the following problem...」と出力される状態では、このバッチはうまく機能します。
しかし、デバイスマネージャーで[!]マークが付かず、devcon statusの出力は「Driver is running.」で、一見、正常に機能しているようでも、Bluetooth関連の他のデバイス(ペアリング済みデバイスや関連サービス)が存在せず、Windows 10からは「Bluetoothが無効です」と認識される場合がありました(画面4)。この状況を解消するのにもデバイスのアンインストールが必要なのですが、この場合はアンインストールのためにコンピュータの再起動が要求されました。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 特集「Windows Server 2008/2008 R2 サポート終了対策ポータル」
- 年の初めに再確認、2018年にサポートが終了するMicrosoft製品は?
Microsoftは同社の製品およびサービスについて、明確なサポートポリシー(ただし、途中で変更あり)に基づき、更新プログラムを含むサポートを提供しています。2018年は主に10年前にリリースされた製品がサポート終了を迎えます。どのような製品があるのか、年の初めに再確認し、使用していないかどうかを調べておきましょう。 - 再考、Windows OSのライフサイクル――安心して2020年を迎えるために
Windowsのサポートライフサイクル期限が近づくたびに、サポート終了の影響やアップグレードの必要性が話題になります。特に2014年4月にWindows XPのサポートが終了してからがそうです。その理由は、Windows PCやインターネットの普及、Microsoftのサポートポリシーの明確化(や変更)、新たなセキュリティ脅威の登場など、さまざまです。2017年4月にWindows Vistaのサポートが終了しました。次は、Windows 7の番です。 - Windows Server 2012 R2で行こう!
Windows Server 2003のサポート終了日「2015年7月」がいよいよ迫ってきた。現在Windows Server 2003を利用している企業は、新しいOSへの移行を本格的に検討する必要があるだろう。本稿では、Windows Server 2003から最新のWindows Server 2012 R2へ移行する理由やメリットについて取り上げる。 - サポート切れのサーバーOSを使い続けるリスクは経営課題と考えるべき
OSのサポートが終了すると、セキュリティ面で大きな問題を抱えることになる。では、サポート終了後もWindows Server 2003を使い続けることによって、企業はどのようなリスクを負うことになるのだろうか。IPAの渡辺貴仁氏に話を聞いた。