Groovy で Windows Update の履歴を出力する - Scriptom を使った COM 実行

Groovy スクリプト上で Windows の COM 実行を可能とする Scriptom モジュールを試すために、Windows Update の履歴を出力する処理を Groovy スクリプトで書いてみた。

実行環境は以下の通り。

  • Java SE 6.0 Update 11
  • Groovy 1.5.7
  • Scriptom 1.5.4

WSH スクリプトで Windows Update の履歴出力

Groovy で書く前に、一応 WSH スクリプトで動作確認してみた。(Windows Update の履歴取得は Windows Update Agent API を使用)

wuHistories.js
//IUpdateSession 実装オブジェクト生成
var session = WScript.CreateObject("Microsoft.Update.Session");
//IUpdateSearcher 実装オブジェクト取得
var searcher = session.CreateUpdateSearcher();

//履歴総数を取得
var historyCount = searcher.GetTotalHistoryCount();

//全履歴を取得(IUpdateHistoryEntryCollection)
var histories = searcher.QueryHistory(0, historyCount);

for (var i = 0; i < histories.Count; i++) {
    //IUpdateHistoryEntry
    var entry = histories.Item(i);
    WScript.echo(entry.Title + " = " + entry.ResultCode);
}
実行例
>cscript.exe wuHistories.js
・・・
Windows Update ソフトウェア 7.0.6000.381 = 2

Groovy スクリプトで Windows Update の履歴出力

まず、Scriptom を以下の手順でインストールしておく。

Scriptom のインストール手順
  1. Scriptom の zip ファイル(scriptom-1.5.4.zip)をダウンロードし、適当なディレクトリに解凍
  2. 解凍先ディレクトの scriptom-1.5.4b12.jar が Groovy 実行時のクラスパスに含まれるように設定
  3. 解凍先ディレクトリのパスを環境変数 PATH に追加(scriptom-1.5.4b12-xXX.dll を java.library.path に含めるための措置)

そして、Groovy スクリプトを以下の点に注意して作成する。(基本的な処理は WSH スクリプト版とほぼ同じ)

  • COM の処理を Scriptom.inApartment{} 内に記述
  • new ActiveXObject で COM オブジェクトを生成
wuHistories.groovy
import org.codehaus.groovy.scriptom.*

Scriptom.inApartment {
    def session = new ActiveXObject("Microsoft.Update.Session")
    def searcher = session.CreateUpdateSearcher()

    def historyCount = searcher.GetTotalHistoryCount()

    def histories = searcher.QueryHistory(0, historyCount)

    histories.each {
        println "${it.Title} = ${it.ResultCode}"
    }
}
実行例
>groovy wuHistories.groovy
・・・
Windows Update ソフトウェア 7.0.6000.381 = 2