PowerShellを使用して特定のドライバがインストールされているか確認する方法

PowerShellで特定のドライバーがインストール済みか確認するには、「現在のデバイスへ関連付いた署名済みドライバー」「接続中または記録済みのPnPデバイス」「ドライバーストア内のパッケージ」「起動中のシステムドライバー」を区別します。中心となるWin32_PnPSignedDriverは、デバイス名、INF名、プロバイダー、バージョン、署名などを調べるのに便利です。ただし一覧に一行あるだけでは、目的のハードウェアで現在使われ正常に動いているとは限りません。本記事では変更を加えず、複数の標準情報源を照合する手順を解説します。

目次

最初に何を「インストール済み」と呼ぶか決める

問い合わせで必要なのが、特定機種のデバイスが現在接続されていること、目的のINFパッケージがドライバーストアにあること、デバイスへその版が選択されていること、カーネルドライバーサービスが起動していること、のどれかを明確にします。同じ製品名でも複数ハードウェアID、複数版、拡張INF、フィルタードライバーが関係する場合があります。

表示名だけの部分一致では、似た製品や古い未接続デバイスを拾う可能性があります。ベンダーが示すDevice ID、Hardware ID、INF名、Provider、DriverVersion、DriverDate、Signerを確認します。日付だけで新旧を決めると、ベンダーが互換性のため固定した日付やWindows Updateの配布方式により誤ることがあります。目的の製品とOSビルドに対応する公式パッケージ情報を基準にします。

Win32_PnPSignedDriverで署名とバージョンを確認する

Get-CimInstance -ClassName Win32_PnPSignedDriverで、PnP署名済みドライバーの情報を取得できます。まず候補をDeviceNameやDriverProviderNameで絞り、DeviceID、InfName、DriverVersion、DriverDate、IsSigned、Signerを表示します。端末によっては件数が多いため、Format-Tableで切れるよりSelect-Objectの結果をリスト表示し、完全な値を確認します。

Get-CimInstance -ClassName Win32_PnPSignedDriver |
    Where-Object { $_.DeviceName -like "*対象製品名*" } |
    Select-Object DeviceName, DeviceID, DriverProviderName,
        InfName, DriverVersion, DriverDate, IsSigned, Signer

検索語は実際の製品名へ置き換えます。候補が0件でも、名前の違い、デバイス未接続、別方式のドライバー、取得権限、WMI/CIM問題が考えられます。複数件ならDeviceIDとInfNameで対象を特定します。IsSignedがTrueでも、そのドライバーが最新、脆弱性なし、製品で推奨、現在ロード中という意味ではありません。署名者、配布元、サポート情報を合わせて確認します。

厳密な一致にはDeviceIDとInfNameを使う

自動判定ではDeviceNameのあいまい検索だけに頼らず、既知のDeviceIDまたはINF名を使います。Hardware IDはモデルやリビジョンを表し、DeviceIDはインスタンスを識別します。InfNameはインストール後にoem42.infのような公開名になることがあり、配布元ファイル名と一致しない場合があります。正常端末の同じ機種・OSから基準値を取得すると比較しやすくなります。

$target = Get-CimInstance Win32_PnPSignedDriver |
    Where-Object DeviceID -eq "PCI\VEN_0000&DEV_0000\INSTANCE"
$target | Select-Object DeviceName, DeviceID, InfName, DriverVersion, IsSigned

例のIDは架空なので、実際の対象デバイスの正確な値へ置き換えます。DeviceIDにはバックスラッシュやアンパサンドが含まれるため、コピー時の欠落やHTMLエスケープに注意します。組織の資産識別子として扱われる場合は外部へ公開しません。複数端末でインスタンス固有部分が異なる場合、Hardware IDやProvider、クラスGUID、INF名の組み合わせで規則を設計します。

Get-PnpDeviceでデバイスの現在状態を照合する

Get-PnpDeviceはPnPデバイスのStatus、Class、FriendlyName、InstanceIdなどを取得します。-PresentOnlyを使うと現在存在するデバイスへ絞れるため、過去に接続したデバイスと区別する手掛かりになります。Win32_PnPSignedDriverのDeviceIDとInstanceIdを照合し、目的デバイスがPresentか、StatusがOKか、問題状態かを確認します。

Get-PnpDevice -PresentOnly |
    Where-Object FriendlyName -like "*対象製品名*" |
    Select-Object Status, Class, FriendlyName, InstanceId

StatusがOKでもアプリケーションが正しく使えることを完全には保証しません。デバイス固有のファームウェア、サービス、フィルター、権限、アプリ設定が残ります。UnknownやErrorの場合は、デバイスマネージャーの問題コード、イベントログ、製品診断を確認します。デバイスを無効化、削除、再スキャンして試す操作は利用中ハードウェアや入力・ネットワークを止める可能性があるため、確認段階では実施しません。

PnPUtilのenum-driversでドライバーストアを確認する

Windows標準のpnputil /enum-driversは、ドライバーストア内のサードパーティー製ドライバーパッケージを列挙します。Published Name、Original Name、Provider Name、Class Name、Driver Version、Signer Nameなどを確認し、Win32_PnPSignedDriverのInfNameと照合します。このコマンドの対象は「すべての現在使用中ドライバー」ではなく、サードパーティーパッケージの列挙である点が重要です。

pnputil /enum-drivers

Windows版により/classや/filesなど利用可能な列挙オプションが異なります。対象端末でpnputil /?を確認します。/enum-driversは読み取りですが、同じツールには削除、無効化、再起動、デバイス削除など影響の大きい機能があります。候補のoem番号を見つけても、使用中デバイス、依存関係、BitLockerやネットワーク、復旧手段を確認せず削除しません。

Get-WindowsDriverでオンラインWindowsのパッケージを調べる

DISMモジュールのGet-WindowsDriver -Onlineは、実行中Windowsイメージのドライバー情報を取得します。既定ではサードパーティードライバーが中心で、-Allを付けると既定ドライバーも含めて確認できます。Driver、OriginalFileName、ProviderName、ClassName、Date、Version、BootCriticalなどを選択し、INF名やプロバイダーで候補を探します。

Get-WindowsDriver -Online -All |
    Where-Object ProviderName -like "*対象ベンダー*" |
    Select-Object Driver, OriginalFileName, ProviderName,
        ClassName, Date, Version, BootCritical

環境や版によって管理者権限が必要となり、取得に時間が掛かる場合があります。権限不足と0件を分け、通常権限で十分なWin32_PnPSignedDriverから始めます。オンラインイメージにパッケージが存在しても、対象デバイスへ現在選択されているとは限りません。逆にWindows標準のインボックスドライバーは、サードパーティーだけの列挙では見えないため、-Allの範囲を理解して使います。

Win32_SystemDriverはドライバーサービスの状態確認に使う

Win32_SystemDriverは、システムドライバーとして登録されたサービスのName、DisplayName、State、StartMode、PathNameなどを表します。ファイルシステムフィルター、セキュリティ製品、ネットワークフィルターなど、デバイス一覧だけでは捉えにくいドライバーサービスの登録と状態を確認できます。ただし、ドライバーストアのパッケージ一覧やPnPデバイス一覧と同じものではありません。

Get-CimInstance Win32_SystemDriver |
    Where-Object DisplayName -like "*対象名*" |
    Select-Object Name, DisplayName, State, StartMode, PathName

StateがRunningなら取得時点でドライバーサービスが動作中と報告されていますが、目的製品の全機能が正常とは限りません。Stoppedでもオンデマンドや特定ハードウェア接続時だけ開始する設計があります。PathNameは内部構成を示すため共有範囲を制限します。起動種類変更、停止、サービス削除はOS起動不能やセキュリティ低下を招く可能性があり、本記事では行いません。

バージョンと日付の比較で起きる誤りを避ける

DriverVersionは文字列として返る場合があり、単純な辞書順では10.0.10と10.0.9を誤って比較する可能性があります。形式が四つの数値なら[version]へ変換できますが、ベンダー固有の接尾辞がある場合は変換できません。変換失敗を古い版と扱わず、製品の公式リリース表と正確な文字列を照合します。

DriverDateは新しさやインストール日時の絶対的な指標ではありません。互換性順位のため特定日付を使うパッケージや、同じ版を別日に配布する場合があります。InstallDateも空の場合があります。比較ではProvider、INF、Version、Signer、Hardware ID、OSビルドを組み合わせます。「より大きい版なら必ず安全」とせず、端末メーカーやMicrosoftが対象機種・OSに承認した版を確認します。

問題を見つけた後も削除や更新を急がない

目的のドライバーが見つからない、署名が期待と違う、デバイスStatusがError、版が基準外という結果は、次の調査対象です。デバイスマネージャーの詳細、Windows Update履歴、OEM更新ツール、セットアップログ、イベントログ、製品サポート表を確認します。ドライバー更新には互換性、再起動、BitLocker回復、ネットワーク断、入力機器停止などの影響があり得ます。

ドライバーを削除、ロールバック、強制更新する前に、正規パッケージ、復旧用ネットワークや入力手段、回復キー、メンテナンス時間、バックアップ、既知の問題、元のパッケージを準備します。セキュリティ製品や暗号化、ストレージ、ネットワークのドライバーは特に影響が大きいため、製品ベンダーと管理者の手順へ従います。確認コマンドの出力だけを根拠に自動削除しません。

確認結果をまとめるチェックリスト

  • デバイスへ適用中、ストアに存在、サービスがRunningのどれを確認するか決めたか
  • Win32_PnPSignedDriverでDeviceID、InfName、Provider、Version、Signerを確認したか
  • Get-PnpDevice -PresentOnlyで現在存在するデバイスと過去の記録を区別したか
  • pnputil /enum-driversがサードパーティーパッケージ中心であることを理解したか
  • Get-WindowsDriverとWin32_SystemDriverの対象範囲を混同していないか
  • 表示名や日付だけで判定せず、Hardware IDと公式対応表を照合したか
  • 削除、無効化、強制更新を読み取り確認から分離したか

結果は取得時刻、端末名、Windowsのエディションとビルド、PowerShellの版、実行ユーザー、対象範囲とともに残します。空の結果は存在しない証明ではありません。権限、モジュール、製品方式、表示対象、リモート接続、Windows版を確認し、取得不能と未検出を分けます。変更、切断、削除、更新、再起動が必要な場合は読み取り確認から分離し、利用者への影響、管理ポリシー、バックアップ、復旧方法を確認します。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次