Windowsがドライバーを自動的に更新しないようにする方法
正直に言うと、Windowsがハードウェアドライバーを勝手にアップデートして、特に少し古いグラフィックカードで何かがおかしくなってイライラした経験があるなら、もうお分かりでしょう。Windows Updateがデバイスを認識し、新しいドライバーをダウンロードして、好むと好まざるとにかかわらずインストールしてしまうことがあります。しかし、必ずしもそうであってほしいとは限らないのです。もしかしたら、ドライバーはもう何年も問題なく動作していて、最新のアップデートが来ると頭痛の種になるかもしれません。そこで、簡単な設定から細かい調整まで、ドライバーをきちんと管理するための大まかなガイドをご紹介します。ネタバレ注意:常に完璧とは限らず、時には少し手作業が必要になることもありますが、これで少しでも頭痛の種が減ることを願っています。
特定のドライバーアップデートがポップアップ表示されてセットアップが台無しになるのを防ぐ方法
Windows が特定のデバイス ドライバーを更新しないようにする
もしあなたが私と同じように、Windowsが頼りにしている古い(けれど安定している)グラフィックドライバーをいちいち更新し続けるのにうんざりしているなら、これはまさに救世主です。パッチのたびに更新を繰り返し、不具合を起こすドライバーが1つある場合、更新を非表示にすることで状況は一変します。Windowsには「更新プログラムの表示/非表示」という公式ツールがあり、とても分かりやすいのですが、見落とされがちです。
- Microsoftのサイトからwushowhide.diagcabをダウンロードしてください。当然ですが、Windowsでは操作が複雑になります。
- ツールを実行し、「更新プログラムを非表示」をクリックします。ドライバーを含む利用可能な更新プログラムがスキャンされます。
- お使いのデバイス(グラフィックカードなど)のドライバーアップデートを選択し、「次へ」をクリックしてください。これにより、Windows からそのアップデートが非表示になり、煩わしく感じることがなくなります。
- 完了です。Windows が新しいバージョンの方が「優れている」と判断した場合でも、ドライバーはそのまま残ります。
設定によっては、この方法は扱いにくい場合があります。非表示がすぐに反映されなかったり、再起動が必要になったりすることもあります。しかし、ほとんどの場合はうまくいきます。PowerShellを使ってこの非表示を自動化したい場合、あるいはどんなアップデートがリリースされているかを確認したい場合は、「Winhance」というモジュールが役立ちますが、正直なところ、GUIでもほとんどの場合問題なく動作します。
PowerShell を使用してドライバーの更新をブロックする
パワーユーザーなら、スクリプトで処理したいこともあるでしょう。利用可能なドライバーアップデートを一覧表示し、不要なものを非表示にすることができます。アップデートIDを見つけるのに役立つ簡単なワンライナーをご紹介します。
$Updates = Get-WindowsUpdate -WindowsUpdate -UpdateType Driver; $Updates | Select Title, Description -Expand Identity | fl
このコマンドはドライバーのアップデートリストを取得します。ブロックしたいドライバーのUpdateIDをメモしておいてください。そして、次のコマンドでそれを非表示にします。
Hide-WindowsUpdate -UpdateID "0be073ee-34ba-432c-91c8-957a608d0e2f"
これは時々少し面倒なこともあります。特にWindowsがまだアップデートをダウンロードしていない場合や、コマンドがエラーを返した場合などです。さらに、PowerShellを管理者として実行する必要があります。完璧ではありませんが、より細かく制御できるようになります。
グループポリシーを使用して特定のデバイスの更新を無効にする
繰り返しになりますが、Windows ProまたはEnterpriseをご利用の場合は、グループポリシーでデバイスごとのアップデートを制限できます。まずデバイスのハードウェアIDが必要になりますが、少し調べる必要があります。
- デバイス マネージャー (
devmgmt.msc) を開き、デバイスを見つけて右クリックし、プロパティ を選択します。 - 詳細 タブに移動し、ドロップダウンを ハードウェア ID に設定します。
- `PCI\VEN_15AD&DEV_XXXX…` のような長い文字列をコピーし、手元に置いておきます。
次のように PowerShell 経由でこの情報を見つけることもできます。
Get-PnpDevice | where FriendlyName -like "*HD Graphics*" | select class, FriendlyName, HardwareID | fl
準備ができたら、グループポリシーエディター ( gpedit.msc ) を開き、ハードウェアIDに基づいてドライバーの更新をブロックするポリシーを作成します。少し面倒ですが、リストからIDを削除するかポリシーを無効にするまで、Windowsがドライバーの更新を再試行するのを防ぎます。
すべての設定を保存し、gpupdate /forceを実行すると、Windows は該当のドライバをインストールしようとする際にエラーを表示します。つまり、ポリシーが正しく機能しているということです。そうでない場合は、ハードウェア ID とポリシー設定を再確認してください。場合によっては、再起動することで問題が解決することもあります。
詳細: レジストリの調整によるドライバー更新のブロック
グループポリシーが面倒だと感じたり、手動で調整したい場合は、レジストリを使ってこれらすべてを行うことができます。編集が必要な裏方的な方法ですが、問題なく動作します。
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions" /v "DenyDeviceIDs" /t "REG_SZ" /d "PCI\VEN_15AD&DEV_XXXX" /f
*PCI\VEN_15AD&DEV_XXXX* を実際のデバイスIDに置き換えてください。他のデバイスもブロックしたい場合は、複数のエントリを作成する必要があるかもしれません。また、遡及的に適用するには、DenyDeviceIDsRetroactiveというパラメータを1に設定してください。
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeviceInstall\Restrictions" /v "DenyDeviceIDsRetroactive" /t "REG_DWORD" /d "1" /f
こうすることで、Windowsは基本的にこれらのドライバーを変更しないように記憶します。すべてを確定するには再起動が必要ですが、確実です。
ドライバーの更新を完全にオフにしたい場合はどうすればよいでしょうか?
以前のバージョンのWindowsでは、システムプロパティに簡単な切り替えオプションがありました。Windows 10/11では、操作は少し複雑ですが、それでも実行可能です。
- Win + Xを押してsysdm.cpl を実行します。
- ハードウェア タブで、デバイスのインストール設定 をクリックします。
- 「いいえ、自分で処理を選択します」(または同様の文言)を選択します。次に、「Windows Update からドライバーソフトウェアをインストールしない」を選択するか、設定で更新を無効にします。
しかし正直なところ、最近ではほとんどの人がGPOやレジストリを使ってこれを制御することを好みます。そうでなければ、Windowsはユーザーの好むと好まざるとにかかわらず、自動的にドライバーを更新します。
ただし、アップデートをブロックすると、重要なセキュリティ パッチやバグ修正を見逃す可能性があるので、そのトレードオフを受け入れられるかどうかを検討してください。
まとめ
- 更新の表示または非表示ツールを使用して、特定のドライバーの更新を非表示にします。
- PowerShell スクリプトを使用して、ドライバー更新 ID を見つけてブロックします。
- デバイス マネージャーまたは PowerShell を使用してハードウェア ID を取得し、グループ ポリシーまたはレジストリを使用してブロックします。
- ドライバーの更新を広範囲に無効にするには、ポリシーまたはレジストリ設定を微調整します。
まとめ
このプロセスは完璧ではありません。アップデートがこっそりと適用されたり、非表示処理がすぐに反映されなかったりすることもあります。しかし、もし頑固なドライバーを使っているなら、これらのトリックで少なくともこの混乱は抑えられるはずです。少し面倒ですが、グラフィックカードが数週間ごとにクラッシュするよりはましです。これで数時間の時間を節約でき、頭を悩ませることなくセットアップを安定させることができることを願っています。お役に立てれば幸いです。