Essentials/WSUS : Sysprep で展開したコンピュータのインベントリが取れたり取れなかったりする

久しぶりの更新となってしまいました。 TechNet の System Center Essentials フォーラム でもご質問いただき、以前から書こうと思っていたことを思い出しました。 Essentials を使用して管理対象のコンピュータを検出したまではよいのですが、条件によってインベントリがうまく取得できないように見えることがあります。 もっと具体的に書きますと、コンピュータの一覧に出てくるのですが、1つのコンピュータのインベントリを取得すると、他のコンピュータが「不明」になってしまう…という現象です。言葉ではうまく書くことができず、すみません。おそらく、経験された方は、「あぁ、あれね!」と思われるかと…。 発生条件は、以下の通りです。 Sysprep を使用して1つのマスターイメージを複数のマシンに展開した これは、WSUSで使用している SusClientID という 識別子が重複しているために発生するものです。 よろしければ、サポート技術情報(英語)もご覧ください。 http://support.microsoft.com/kb/903262/en-us この現象を回避するには、上記のサポート技術情報にも書かれているとおりレジストリエントリを削除する必要があります。 具体的には….と詳細を書こうとしましたら、WSUSでもおなじみ、MVP の山近さんがすでに @IT さんにまとめてくださってました。 [Q&A]そこが知りたいWindows Server Update Services(第1回) Q3 [コンピュータ]にクライアントPCが表示されない(その2)http://www.atmarkit.co.jp/fwin2k/operation/wsusqa01/wsusqa01_03.html WSUSの記事ですが、Essentials でも同様の対処で回避できます。  


SCE / WSUS :今すぐに更新ファイルやソフトウェアをインストールしたい その4 インストール編

大変おまたせしましてすみません。System Center Essentials の環境が壊れてしまい、再構築したりなんだりで時間をくってしまいました。今回は「その4 インストール編」です。 その1~その3 は以下をご参照ください。 SCE / WSUS :今すぐに更新ファイルやソフトウェアをインストールしたい その1SCE / WSUS :今すぐに更新ファイルやソフトウェアをインストールしたい その2 検索編SCE / WSUS :今すぐに更新ファイルやソフトウェアをインストールしたい その3 ダウンロード編 今回で、ひとまずスクリプトの作成は完了です。 ここまで読んでいただければ、あとはオブジェクトをちょっと変えるだけですから文法的に難しいところは特にありません。 スクリプトは その2 および その3 からの続きになっていますので、保存する場合には その2+その3+その4 を1つのテキストファイルに貼り付けて保存してください。保存時の拡張子は vbs、実行時の書式は以下の通りです。 cscript hogehoge.vbs   ‘ その3 からの続きです  Wscript.EchoWScript.Echo “更新ファイルをインストールしています…” ‘ 更新ファイルをインストールするには、UpdateInstaller オブジェクトを使用します。’ まずは「その1」に示したオブジェクトモデル図をご覧ください。’ UpdateSession オブジェクトの配下に UpdateInstaller オブジェクトがありますよね。’ つまり、UpdateSession オブジェクトを起点として、UpdateInstaller オブジェクトの’ インスタンスを取得する必要があるわけです。’ UpdateInstaller オブジェクトのインスタンスを取得するには、CreateUpdateInstaller ‘ メソッドを使用します。 Set objUpdateInstaller = objUpdateSession.CreateUpdateInstaller() ‘…

2

SCE / WSUS :今すぐに更新ファイルやソフトウェアをインストールしたい その3 ダウンロード編

今すぐに更新ファイルやソフトウェアをインストールしたい その1今すぐに更新ファイルやソフトウェアをインストールしたい その2 検索 につづいて、その3 ダウンロード編 です。 ダウンロードの対象となる更新ファイルは、「その2 検索編」で作成した objSearchResult オブジェクトに格納されています。今回は見つかった更新ファイルを全てダウンロード対象としていますが、例えば、「重要な更新だけ適用したい」 ということであれば、「その2 検索編」で示したソースの5行目に書かれた検索条件を以下のように修正します。strSeatchCondition = “IsInstalled=0 and IsAssigned=1” IsAssigned = 1 は、Windows Update を実行したときに、「優先度の高い更新プログラム」に表示される更新ファイルを示しています。 では、ダウンロードを行うコードを書いてみます。以下に示すソースは、前回の「その2 検索編」から続いていますので、実行する場合には「その2 検索編」で示したコードに追記してください。 ‘ (その2 検索編 からの続きです)WScript.Echo “更新ファイルをダウンロードしています…” ‘ ダウンロードを行うには、はじめに UpdateDownloader オブジェクトを’ 取得します。’ UpdateDownloader オブジェクトについては、以下を参照してください。’ http://msdn2.microsoft.com/en-us/library/aa386131.aspx’ 以下では、UpdateDownloader オブジェクトを objUpdateDownloader という’ 名前で取得しています。 Set objUpdateDownloader = objUpdateSession.CreateUpdateDownloader() ‘ ダウンロードする更新ファイルは、UpdateDownloader オブジェクトの ‘ Updates プロパティで指定します。指定するのは、既に取得してある’ 検索結果です。つまり、objUpdateCollection ですね。’ 確認のために、以下のページを見てください。’ http://msdn2.microsoft.com/en-us/library/aa386371.aspx’…

2

SCE / WSUS :今すぐに更新ファイルやソフトウェアをインストールしたい その2 検索編

WSUS の API を使用して更新ファイルを検索するには、以下のようなコードを使用します。 拡張子 vbs でテキストファイルとして保存し、コマンドプロンプトより以下の書式で実行してください。 cscript hogehoge.vbs インラインで解説を入れておきますので参考にしてください。 ‘ WSUS のクライアントエージェントを使用した管理を行う場合には、ここからはじまります。’ UpdateSessionオブジェクトが、基点のオブジェクトとなります。’ ここでは、UpdateSession オブジェクトを、objUpdateSession という名前で取得します。 Set objUpdateSession = CreateObject(“Microsoft.Update.Session”)’ 検索をするにあたり、検索用のオブジェクト(Searcher オブジェクト)を取得しておきます。’ 検索用のオブジェクトは、Microsoft.Update.Session オブジェクトの ‘ CreateUpdateSearcher メソッドで取得します。Set objUpdateSearcher = objUpdateSession.CreateupdateSearcher( )WScript.Echo “更新ファイルを検索しています…” ‘ Searcherオブジェクトで検索する際に、条件を付けることができます。’ 与えられえる条件は、http://msdn2.microsoft.com/en-us/library/aa386526.aspx を’ 参照してください。’ 今回は、「インストールされていない更新ファイル」ということで、IsInstall = 0 を指定します。strSeatchCondition = “IsInstalled=0″‘ 以下はコメントアウトしていますが、Typeを指定することで、ソフトウェアなのかドライバ’ なのかを指定して絞り込むことも可能です。’ strSeatchCondition = “IsInstalled=0 and Type=’Software’ “‘ strSeatchCondition = “IsInstalled=0 and Type=’Driver’…

2

SCE / WSUS :今すぐに更新ファイルやソフトウェアをインストールしたい その1

TechEd での Essentials セッション参加者の皆様、大変お待たせしました。いろいろと技術検証を行っており、遅くなってしまいました。 SCEに限らず、Windows Update または WSUS を使用して更新ファイルを今すぐに適用するためのスクリプトをご紹介します。いや、紹介するだけではつまらないので、スクリプトを一緒に作っていきましょう。 スクリプト自体、さほど新しいわけでもなく、むかしからいろいろなサイトでご紹介されているものですが、日本語解説がついたものはあまりないみたいですので、スクリプトの勉強がてら読んでいただければと思います。 でははじめましょう。 まず、以下の図をざーっとごらんください…ちょいと大きくてすいません。 DEVな方や、スクリプトの開発になれた方にはおなじみですよね。クリックしていただくと、MSDNの当該ページに移動します。これはなにかといいますと、Windows Update Agent のオブジェクトモデルです。スクリプトを書くときに限らず、開発者の心の友でもあります。 これをご覧いただくと、なんとなく、UpdateSession というオブジェクトに便利そうな機能が詰まっているであろうことがわかります。なんとなくでよいので、そんな気分になってみてください(強引だな)。 今回は、Windows Update サイトもしくは、WSUSのサイトにアクセスして適用可能な更新ファイルが存在する場合には即座に適用するためのスクリプトを作成します。上記のオブジェクトモデルを参照すると、以下のことが予測できます。 UpdateSeacher は更新ファイルの検索に使うような気がする UpdateDownloader は更新ファイルのダウンロードに使うような気がする UpdateInstaller は更新ファイルのインストールに使うような気がする こうして “あたり” をつけたら ( というやり方が正しいかどうかはおいといて… )、もうやることはなんとなく見えてきました。 探して、ダウンロードして、インストールすればよいわけですね。 では、まず「探す」スクリプトから作りましょう。  続きは、「その2 探す編」にて。 参考サイト Searching, Downloading, and Installing Updateshttp://msdn2.microsoft.com/en-us/library/aa387102.aspx Tales from the Scripthttp://www.microsoft.com/japan/technet/community/columns/scripts/sg0705.mspx  

5

WSUS を Script から管理するには

WSUS を管理するスクリプトをお探しの皆さんへ。 残念ながら JP の Script Center には公開されていませんが、USサイトには WSUS 関連のスクリプトが掲載されています。 今後、Script Center を含め US サイトとJP サイトの連携が強化される予定です。まだ詳細は私も把握していませんが、個人的にも大いに期待しています。ちなみに、US の Script Center は MSDN ライブラリのようなツリー構造で、かつスクリプトの検索もできるようになっています。RSSも有効なので、最新のスクリプトがすぐに把握できて便利です。 US の Script Center に掲載されているスクリプトは以下の通りです。 Windows Update│├ Client Side Management||│├ Software Update エージェントの設定画面を表示するスクリプト vbs│├ Software Update ウィザードの起動 vbs│├ 特定のアップデートモジュールを適用する  vbs││  ※Exception がプロパティエラーになりますね│├ 自動更新の設定を表示する vbs ││  ※このスクリプトは、Tales from the Script で詳しく解説されています│├ Windows Update エージェントに設定されているプロキシーを表示する vbs│├ Windows Update エージェントの更新プログラムの検索に関する動作環境を表示する vbs│├…