インストールされた更新プログラムを確認する

先日、トレーニングにご参加いただいたお客様から、
パッチ管理システムなどを使わないで、インストールされた更新プログラムを確認する方法はありますか?
というご質問をいただきました。

私はすぐに、Win32_PatchというWMIクラスを思いついたのですが、
私の環境では動作しなかったので、(何か決定的な原因がありそうですが、今はその時間がないので)
代わりにMicrosoft.Update.SessionというCOMオブジェクトを使って確認する方法を考えてみました。

PowerShellで実行する場合、次のようにスクリプトを書いて実行するとよいでしょう。


$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$HistoryCount = $Searcher.GetTotalHistoryCount()
$Searcher.QueryHistory(1,$HistoryCount) | ft title  

実行結果はこのとおり。

WUS1

以上の内容をメモ帳で書いて、拡張子PS1のファイルにし、実行すれば、いつでも確認できますね。
また、テキストファイルに保存したければ、最後の行を

$Date = Get-Date –format “yyMMddHHmmtt”
$ComputerName = (Get-WmiObject -Class Win32_Computersystem).Name
$reportfile=[string]::join(“”,@(“c:”,$Date,$ComputerName,”.txt”))
$Searcher.QueryHistory(1,$HistoryCount) | ft title | out-file $reportfile


と書きかえれば、ファイル名に実行日時とコンピュータ名が入ったファイルとして保存されるようになります。
あとは各コンピュータで実行すれば、それぞれのコンピュータでの更新プログラム適用状況が確認できます。

言うまでもないかもしれませんが、PS1ファイルを実行するときは、
事前に「Set-ExecutionPolicy RemoteSigned」と実行しておくこともお忘れなく。

9月19日 追記
WMIにWin32_QuickFixEngineeringクラスというのがあるので、
Get-WmiObjectで実行し、調べるという方法があります。

WUS2 

Get-WmiObject –Class Win32_QuickFixEngineering –Computername (コンピューター名)
とすれば、他のコンピューターの更新プログラムの適用状況も確認できそうですね。