やりたいこと
お仕事で、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 クラス
ヒントを得たページ。PowerShellで情報取得してる。
ぼやき
WMIでなにかの情報を取ろうと思ったとき(今回ならWin32_PnPSignedDriver
)、どうやってどれを使えばよいか調べればよいのか?
WMIのクラスが多すぎて、なにか情報を取りたいときにどれを使えばほしいのが取れるのかが全然わからない。。。
今回も、たまたまpowershellの上記参照のページを見なければ、(MSの公式ページの情報では)たどり着けなかった。。。