第17回 OSのバージョンやパッチ適用状況のチェックに使えるバッチファイル“3選”
サーバ管理者必見!! “疑問”“奇問”“難問”に答えます大手企業であればキチンとしたシステム管理部門があるが、中小規模企業だとそうはいかない。ちょっとコンピュータに詳しいがゆえに「じゃ、サーバ管理やって」と命令され、途方に暮れている人もいるだろう。本連載ではWindows OSに特化し、ありがちな質問からMicrosoftのWebサイトにも掲載されていないような奇問までを取り上げ、その解決方法を指南する。サーバ管理で頭を痛めている人はぜひ参考にしてほしい。
【質問49】
更新プログラムがインストール済みかどうかすばやく調べる方法
[対象]Windows XP、Windows Vista、Windows 7、Windows Server 2003、Windows Server 2008、Windows Server 2008 R2
■現象
コンピューターに特定の更新プログラムがインストールされているかどうかを簡単に調べる方法はないでしょうか。「コントロールパネル」の「インストールされた更新プログラム」や、Windows Updateの「更新履歴の表示」で確認することもできるのですが、KB(Knowledge Base)番号で並べ替えることができないため、確認するのがたいへんです。

▲Windows Updateでインストールされた更新プログラムの一覧は、KB番号による検索ができない
■解決
OSの構成情報を表示する「Systeminfo」コマンド(Systeminfo.exe)を利用する方法があります。Systeminfoコマンドの実行結果の「ホットフィックス:」には、インストール済みの更新プログラムの一覧が表示されます。ここで「FIND」コマンドを使用して、テキスト検索でフィルターすることで、特定のKB番号の更新プログラムがインストールされているかどうかを確認することができます。
Systeminfo | FIND "KB番号"

▲Systeminfoコマンドの「ホットフィックス:」の一覧から、特定のKB番号に一致する更新プログラムを検索する
ただし、Systeminfoコマンドの「ホットフィックス:」一覧は、Windows Updateの更新履歴とは完全に一致しないようで、一部の更新プログラムの情報が抜けることがあります。
Windows Updateでインストールされた更新プログラムの完全なリストを対象にして検索するには、「Windows Update Agent API」を利用します。
■Using the Windows Update Agent API(MSDN Library)
[URL]http://msdn.microsoft.com/en-us/library/aa387287(v=VS.85).aspx
次のWindows Script Host(WSH)スクリプトは、Windows Update Agent APIを利用して、Windows Updateの更新履歴の一覧(インストール状態が「成功」のみ)を出力するVBScriptで記述したスクリプトの例です。
【wuhistory.vbs】
--------------------------------------------------
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
intCount = objSearcher.GetTotalHistoryCount
Set colHistory = objSearcher.QueryHistory(0, intCount)
For Each objHistory In colHistory
If objHistory.HResult = 0 then 'インストール成功
WScript.Echo DateAdd("h",9,objHistory.Date) & ", " & objHistory.Title
End If
Next
--------------------------------------------------

▲Windows Update Agent APIを利用したWSHスクリプトで、Windows Updateの更新履歴を検索する



























