先日、トレーニングにご参加いただいたお客様から、
パッチ管理システムなどを使わないで、インストールされた更新プログラムを確認する方法はありますか?
というご質問をいただきました。
私はすぐに、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 |
実行結果はこのとおり。
以上の内容をメモ帳で書いて、拡張子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で実行し、調べるという方法があります。
Get-WmiObject –Class Win32_QuickFixEngineering –Computername (コンピューター名)
とすれば、他のコンピューターの更新プログラムの適用状況も確認できそうですね。