先日、トレーニングにご参加いただいたお客様から、
パッチ管理システムなどを使わないで、インストールされた更新プログラムを確認する方法はありますか?
というご質問をいただきました。
私はすぐに、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 (コンピューター名)
とすれば、他のコンピューターの更新プログラムの適用状況も確認できそうですね。
コメント
先日研修、受けさせてもらった者です。
私が研修時に質問した件ですね、
早速UPして頂き有難うございます。
動作ですが自マシンで実行した所、確認できました。
AD上でログインタスクで設定すれば各社員PCの更新状況も取得できそうですね。
PowerShell自体は、今回使うのがはじめてなのであわせてじっくり確認していきたいと考えています。
以上取り急ぎ、お礼まで。
先日は研修にご参加いただき、ありがとうございました。
PowerShellを使う場合、PowerShell自体をインストールしておかなければならないので、その点が課題ですが、
VB Scriptなどに比べてスクリプト自体は簡単に作れることがメリットです。
いろいろ試していただき、ぜひモノにしていただければと思います。
WMIを使った方法は、PowerShell 2.0 なら「get-hotfix」コマンドレットでも同じ結果を得られます。しかし得られるのは hotfix の情報だけで、なおかつインストール日時が不正確なのが難点です。
COMオブジェクトを使えば、Windows Defender の定義ファイル更新なんかも得られますし、正確な(といっても国際時間なので9時間ずれてますが。)インストール日時を得られます。
こちらの方が便利そうですね。
しかし一体どうして両者の時刻に違いが出るのでしょうか・・・
ありがとうございます!
PowerShell 2.0以降なら確かにGet-Hotfixコマンドレットが便利ですね。
ただ、色々ある方法をひとつにまとめてほしいというのが私の願いです、はい。