ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Windows VistaコミュのVistaのセキュリティパッチ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Vistaに適用されているセキュリティパッチ(更新プログラムとか)の情報を取得しリスト化するプログラムを作りたいと思っています。
コントロールパネル−プログラムと機能−インストールされた更新プログラムを表示の内容そのままでもいいし、多少表示名が異なってもいいので、一覧を取得できる方法はないでしょうか?

XPのときはレジストリにある程度まとまって登録されていたけど、Vistaでは情報がちりばめられているように感じます。
最低限の情報で適用されていることがわかるのであれば助かるのですが・・・。

また、VBやVBSでは難しいでしょうか?
よろしくお願いします。

コメント(10)

WMIから取得するか、WinAuditというツールを使えばある程度取れると思いますよ。


↑の言葉の説明はしませんのであしからず。
目標: VBScriptを利用したWMIにて更新プログラム一覧の表示
必要な技術
1. 文字列の入力
2. 文字列の連結
3. 文字列の表示
参考:http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh02/cformwsh02_02.html
4. 更新プログラム一覧の取得(WMIを利用)
参考:http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/sept05/hey0930.mspx

ということで、作ってみました。
PHPなどプログラミングはしてますが、VBS全然しらない人間でも
まぁとりあえず動くものはすぐに作れましたよ。まぁ一覧が正しいかどうかの
検証まではしてませんけどね。

以下どうやらインデントは無視されるようなので、ForやIFの行に
若干のインデントをつけてやると見やすくなります。

----
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
Set objResults = objSearcher.Search("Type='Software'")
Set colUpdates = objResults.Updates

Dim Msg
Msg = "[更新プログラム一覧]" & vbCrLf

For i = 0 to colUpdates.Count - 1
If colUpdates.Item(i).Title <> "" Then
Msg = Msg & i+1 & ". "
If colUpdates.Item(i).IsInstalled <> 0 Then
Msg = Msg & "(更新済) "
Else
Msg = Msg & "(未更新) "
End If
Msg = Msg & colUpdates.Item(i).Title & vbCrLf
End If
Next

MsgBox Msg
----
一番重要なのは「なんでそれが欲しいのか」だと思うのですが……。

どのマシンにどの更新が適用されているのかを確認するために、とかいう話であれば、そもそも Microsoft からそういうツールが配布されています。
Active Directory があるなら WSUS 等を使う事で適用する更新プログラムの制御などもできますし、適用状況のレポートなどを生成する事もできます。

# 思いっきり Vista に限らない話ですけど。
ゆうなん☆いずみさん
アドバイスはありがとうございます。
もう少し調べてみます。

kimipoohさん
Vistaで実行してみましたが、3行目でエラー出してるようです・・・。
Searchの値がおかしいのでしょうか?
kimipoohさんの環境では正常動作しましたか?

艦長さん
なぜ欲しいか・・・、必要がなければ越したことはないのですがそうもいかず。
環境はAD、SCCMを使っています。
通常の端末にはもれなく適用されますが、中には適用が何十個もできていない端末もあるため足で適用状況を確認しなければならない現状があります。
(もちろんあたりをつけて、ですが)
そのための未適用抽出プログラムを作成したい、という事情がありますがく〜(落胆した顔)
手持ちのXP, Vistaで動作しましたが、

http://localhost/~kitani/tools/windows/index.html#3

にも置いてみましたので、ダウンロードしてみてはどうでしょうか。
コピー&ペーストがおかしいのかもしれませんし。

ただ、AD使っているならば、
すでに指摘があるように、
WSUS: http://www.atmarkit.co.jp/fwin2k/operation/wsus3_01/wsus3_01_01.html
にチャレンジしてみたほうがいいと思います。

私は単に、VBScriptを勉強したかったんで、ついでに作ってみただけというのですが
今日は、VBScriptにはまってしまいました・・・。いろいろ出来ますね。
試した環境は、ADでない一般の個人PCなんで、
AD環境ならばエラーが出たりするのかもしれません。
AD を利用している状況なのであれば、適用されていないマシンは適切に AD にコンピューターアカウントが登録されているのかとか、そっちから確認してみた方がいいかもしれませんね。
CM クライアントが承認されているかも要確認でしょうか。

あとは TechNet の方からヒントとなる情報を見つけられればラッキー、かな?
http://technet.microsoft.com/ja-jp/library/bb680935.aspx とか、その辺りに似たような状況は出てないでしょうか。

kimipooh さん:
SCCM をお使いなので、WSUS は特に必要ないかも。
基本的に上位機能を提供するサービスですから。
kimipoohさん
AD環境での使用に難がありそうな感じです・・・。
スタンドアロン端末で実行したところ正常に結果出力されました。
どうもWindows Updateが有効でないと動作しないようでした。
SCCMを利用している状態なのでWUは無効になっています。
WUの設定画面はポリシーで塞がれていましたので、レジストリから有効に変更してみましたが実行できませんでした。
WUが引っかかっているのでしょうかね?

艦長さん
実はシステム切り替えが今年あり、以前までWSUSを利用しておりました。
その当時からパッチ適用漏れは存在し、奔走しておりました。
ADに登録されているのに適用されない、というのはザラでした・・・。
AD管理者に確認してみることにします。
8: ひろしさん:
WSUS でも適用漏れが出ているのであれば、AD のグループポリシーで更新適用ポリシーがどのようになっているかを確認した方がいいかもしれませんね。
特に「自動更新を構成する」「イントラネットの Microsoft 更新サービスの場所を指定する」「自動更新の検出頻度」「自動更新をただちにインストールする事を許可する」辺りでしょうか。
これ以外の項目が無駄に有効になっていないか、というのもチェックする必要はありますね。
Vista 以降だと導入スケジュールに合わせてスリープ解除なんかもできますが……。

また、「Windows Update のすべての機能へアクセスを削除する」が有効になっていると自動更新も無効となるため、これは未構成であるか無効となっている必要があります。
Vista だと関係ないですが、2000 や XP が混じっている場合は影響があります。

最後の項目以外は [コンピューターの構成] - [ポリシー] - [管理用テンプレート] - [Windows コンポーネント] - [Windows Update] にありますが、最後の項目だけ [ユーザーの構成] (以下同じ階層) にあります。

また、自動更新の検出頻度が十分に分散されているか (この辺りはサーバのアクセス負荷を確認) の確認も必要でしょうか。

AD にコンピューターが登録されているのにポリシーが適用されていないのであれば、もしかしたら普段ドメインにログオンをしていないユーザーかもしれないので、この辺りも確認してみた方がいいかもしれないですね。
ローカルマシンにログオンとかされても……ねぇ。(苦笑)

あと、この辺りの話だと Microsoft に直接問い合わせちゃった方がいいかもしれないですね。
中の人の方が豊富にインシデント事例を持っていると思いますし。
艦長さん
いろいろ情報をありがとうございます。
先ほどAD管理者に確認をお願いしました。
調査待ち、です。

ローカルユーザでのログオンというのはないので調査結果に期待したいところです^^
(ローカルユーザは公開していないので)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Windows Vista 更新情報

Windows Vistaのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング