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

大変おまたせしましてすみません。System Center Essentials の環境が壊れてしまい、再構築したりなんだりで時間をくってしまいました。
今回は「その4 インストール編」です。

その1~その3 は以下をご参照ください。

SCE / WSUS :今すぐに更新ファイルやソフトウェアをインストールしたい その1
SCE / 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()

' UpdateInstaller オブジェクトを取得したら、インストールする更新ファイルを指定' しなければなりません。今回は、未適用の更新ファイルを片っ端から適用しますので、' その2 で取得した UpdateCollection オブジェクトを Update パラメタに与えてあげれば' OK です。

objUpdateInstaller.Updates = objUpdateCollection

' 更新ファイルを指定したら、Install メソッドで更新開始です。' ちなみに、更新が完了するまで一旦応答が無くなりますので注意してください。' 処理結果は、InstallationResult オブジェクトに格納されます。

Set objInstallationResult = objUpdateInstaller.Install()

Wscript.Echo WScript.Echo "更新結果"Wscript.Echo "-------------------------------------------------"

' 更新が完了したら、それぞれの更新ファイルごとにインストール結果を参照しましょう。

For i = 0 to objUpdateCollection.Count - 1

' インストール結果を取得するには、InstallationResult オブジェクトの ' GetUpdateResult メソッドを使用します。注意しなければならないのは、 ' GetUpdateResult メソッドの戻り値がコレクション型であるということです。 ' つまり、個々の更新ファイルごとに戻り値が格納されているわけです。 ' なので、変数 i をインデックスとして、For Next でループさせることで ' 個々の結果を取得できわけですね。 ' でもって、もう1点だけ注意です。 ' GetUpdateResult メソッドの戻り値は、UpdateInstallationResult オブジェクト ' であり、戻り値そのものではありません。以下を見てください。 ' https://msdn2.microsoft.com/en-us/library/aa386486.aspx ' 戻り値を取得するには、UpdateInstallationResult オブジェクトの ResultCode ' プロパティを使用します。 ' ' なお、以下は、objInstallationResult.GetUpdateResult(i).ResultCode ' というように、ResultCode 取得を1行で書いてあります。 ' objInstallationResult.GetUpdateResult(i).ResultCode によって戻り値が ' とれますから、これを Select Case で判断して strResult には表示用の ' 日本語をセットしています。

Select Case objInstallationResult.GetUpdateResult(i).ResultCode Case 0 strResult = "開始されていません" Case 1 strResult = "処理中です" Case 2 strResult = "正常に終了しました" Case 3 strResult = "処理は完了しましたがエラーがあります" Case 4 strResult = "失敗しました" Case 5 strResult = "中断しました" Case Else strResult = "不明" End Select

WScript.Echo "・" & objUpdateCollection.Item(i).Title & ", " & strResult Next

' 更新ファイルを適用すると、中には再起動を要求するものがあります。' 再起動の要否は RebootRequired プロパティで確認することができます。' ただし、ここでも1点注意してください。' 以下の場合、RebootRequired プロパティを InstallationResult オブジェクト' から取得しています。InstallationResult オブジェクトの RebootRequired には、' 今回の更新処理の結果、再起動を要求している更新ファイルがあれば True が格納' されます。' 個々の更新ファイルごとに再起動の要否を確認するのであれば、上記の Forループ' の中で、objInstallationResult.GetUpdateResult(i).RebootRequired を参照' してください。

If objInstallationResult.RebootRequired then WScript.Echo WScript.Echo "再移動が必要です" & vbCrLfElse WScript.Echo WScript.Echo "再移動は必要ありません" & vbCrLfEnd If

Wscript.Echo "更新処理が完了しました"

以上でスクリプトファイルの作成は完了しました。実行結果例を以下に示します。

残るは、SCE へのタスク登録です。
タスクへの登録手順については、動画でお送りしたいと思うのでちょっと準備をさせてください。