WMIでWindowsPCにインストールされたドライバーのバージョンを取得する

tera1707.com

やりたいこと

お仕事で、windowsPCにインストールされたあるドライバーのバージョンを記録したい、ということがあったのだが、毎回毎回デバイスマネージャーを開いて、対象のドライバを右クリックしてプロパティ開いて、、、とやるのがめんどくさかったので、指定のドライバのバージョンをぱっと出せるツールを作りたい。

やりかた

WMIでWin32_PnPSignedDriverを使ってドライバのバージョンを取得する。

サンプルコード

using System.Management;//System.Management.dllをnugetに追加。
using System.Windows.Forms;// プラットフォームをWindowsに限定する。

namespace GetDriversVersion
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            string copyString = "";
            ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\cimv2");
            ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_PnPSignedDriver");
            using var searcher = new ManagementObjectSearcher(scope, query);
            using var queryCollection = searcher.Get();

            foreach (ManagementObject m in queryCollection)
            {
                // WMIオブジェクトのプロパティを取得して表示
                copyString += string.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}\r\n", m["Manufacturer"], m["DeviceName"], m["DriverVersion"], m["ClassGuid"], m["Description"], m["DeviceID"], m["SystemName"]);
                m.Dispose();
            }

            Clipboard.SetText(copyString);
            Console.WriteLine("ドライバ名とバージョンをクリップボードにコピーしました。");
            Console.ReadLine();
        }
    }
}

結果

こんな感じのデータが出る。 ドライバの名前等でほしいデータを絞って表示すれば使えそう。

powershellでやる場合

Get-WmiObject -query 'Select * from Win32_PnPSignedDriver'

同じ情報が取れる。

コマンドプロンプトでやる場合

powershell -command "Get-WmiObject -query 'Select * from Win32_PnPSignedDriver'"

参考

Win32_PnPSignedDriver クラス

docs.microsoft.com

ヒントを得たページ。PowerShellで情報取得してる。

ja.aubertolivier.org

ぼやき

WMIでなにかの情報を取ろうと思ったとき(今回ならWin32_PnPSignedDriver)、どうやってどれを使えばよいか調べればよいのか?
WMIのクラスが多すぎて、なにか情報を取りたいときにどれを使えばほしいのが取れるのかが全然わからない。。。
今回も、たまたまpowershellの上記参照のページを見なければ、(MSの公式ページの情報では)たどり着けなかった。。。