[WMI] PC にインストールされている更新プログラム情報を取るために WMI "Win32_QuickFixEngineering" を使用しても取得できないものがある

みなさんこんばんは。ういこです。

東京はおおむね今夜の 12 時半くらいです。さっきテレカン終わりましたがなんで英語だと眠さが倍増するのか本当に毎回不思議です。どんな不眠症の人でも寝られるんじゃないかと思うこの強力な眠気は高校時代の○○先生(あだ名は Wizard)に匹敵すると思います。

さて、体がだんだん痛くなってきましたよー。さっきなんて同僚から「気持ちが悪くて、関節が急に痛くなってきた」という恐ろしいメッセンジャーが飛んできました。お父さん (現在タミフルで解熱中) を発信源として、まさか FLU と書いてインフルエンザなバイオハザード状態が幕を開けそうです。みんな…きちゃだめぇー(うつるから)。

さて、体が動くうちに up しようとおもいます。また WMI ねたです。

【今日のお題】

PC にインストールされている更新プログラム情報を取得するプログラムを作成したが、Windows Updateの更新履歴に表示される更新プログラムのうち何個かの更新プログラムについての情報がレジストリをチェックしても、WMI "Win32_QuickFixEngineering" を使用しても取得できない。Microsoft Baseline Security Analyzer (MBSA) や Windows Update Agent (WUA) を使用せず、プログラムからこれらの更新プログラムが導入されたことを検知する方法はあるか?

これ、良くあるシチュエーションだと思います。しかし、落とし穴が…。

いわゆる Windows Update の "更新履歴" はそもそも %windir%\SoftwareDistribution フォルダ の edb ファイルに格納された、いわば単なる作業履歴情報に過ぎないのです。削除しても更新プログラムのインストール状態や検出結果には影響はありません。よって更新履歴に表示されることと WMI からインストール情報が取得できるかどうかは別の話となるわけです。

実は、Win32_QuickFixEngineering で取得できない更新プログラムは、以下のレジストリに登録されていないモジュールとなります。

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates

上記レジストリに登録されるモジュールは、現在、コンピューターにインストールされており、削除可能なモジュールのみが対象なのです。そのため、アンインストールできないモジュールや、コンピュータにモジュールがインストールされない場合には、取得することができません。

このレジストリの情報に依存せず、更新プログラムの情報を取得する必要がある場合には Windows Update サービスを使用して取得いただく必要があります。

    Hey, Scripting Guy!

https://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/sept05/hey0930.mspx

   特定の修正プログラムがインストールされているかどうかを確認する方法はありますか

Win32_QuickFixEngineering で情報が不足となる場合には、WUA による取得をご検討ください。

~ ういこう@やっぱり日本語が最高だと思うの本気でマジで。~

 

(2009/04/24 Update)

修正プログラムのインストール状況を WMI でしらべるサンプル (Managed VB / C#) を作りました。

ファイル出力のところがおバカやってたので、その分の修正版のソリューションと、Debug 版ランタイムが入ってないと動かないかもなので、Release 版をつけたサンプルを以下の記事で Up しています。あわせてご参考いただければ幸いです。

[WMI] PC にインストールされている更新プログラム情報を取るために WMI "Win32_QuickFixEngineering" を使用する方法
https://blogs.technet.com/jpilmblg/archive/2009/04/24/how_2D00_to_2D00_get_2D00_qfe_2D00_code_2D00_managed_2D00_vb_2D00_c_2D00_wmi_2D00_exe.aspx.aspx