SCCMによるIE11のデプロイ

さて、SCCMによるIE11のデプロイですが、いきなり問題があります。
必要な更新をインストール後、IE11のインストール後、IE11の更新のインストール後、それぞれの少なくとも3回、PCを再起動する必要があるのです。単純なパッケージを使用したバックグラウンドでのインストールではなく、再起動が行えるタイミングでユーザーにインストールを開始してもらう操作が必要になります。

このため、タスクシーケンスを利用します。
作成方法は下記のとおりです。

  1. 新しくタスクシーケンスを作成します。

  2. まず、IE11が既にインストールされているかどうか確認するステップです。
    こちらのようなWMIクエリを条件に指定し、グループを作成します。この条件がFALSEの場合、IE11のインストールへ進みます。
    SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID = "KB2841134"

  3. 32ビットか64ビットを判定し、グループを分けます。

  4. 前提となる更新をインストールします。
    こちらのようなステップを作成していきます。

    このとき、オプションで条件を指定しておくと、既にインストール済みの場合はスキップするため時間を短縮できます。

    SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID = "KB2533623"

  5. これは私の試行錯誤の結果ですが、/norestart で全て一気にインストールすると、正常にインストールできない場合があるらしく、再起動の回数が増えますが、KB2729094についてはインストール後一旦再起動しておいたほうがよさそうです。

    このため、KB2729094については、別にグループを作成し、インストールした場合は一旦再起動するようにしました。

    1. まず上記と同様の方法でKB2729094がインストールされているかどうか確認し、結果を変数に設定します。

    2. KB2729094のグループを作成し、変数によって実行するかどうか判定します。

  6. いよいよIE11のインストールですが、このまえに下記のようなスクリプトを実行します。
    On Error Resume Next 
    strComputer = "."
    SET objWMIService = GETOBJECT("winmgmts:\\" & strComputer & "\root\cimv2")
    SET colItems = objWMIService.ExecQuery("Select HotFixID from Win32_QuickFixEngineering where HotFixID='KB2729094'")

    FOR EACH objItem in colItems
    Wscript.Echo objItem.HotFixID
    NEXT

    WSCRIPT.ECHO "DONE!"
    WSCRIPT.QUIT
    これにより、一度WMIクエリを実行しておき、結果をキャッシュさせ、IE11のインストーラ内でのWMIクエリの実行時間を短縮するのが狙いです。

  7. IE11をインストールします。

  8. 引き続き、IE11に必要な更新をインストールします。

    ここで1点注意があります。

    IE11でエンタープライズモードを使用するには KB2929437 が必要ですが、IE11がインストールされる前にこのアップデートを手動でインストールした場合や、IE11を一旦アンインストールしてしまった場合、IE11をインストール後再度インストールする必要があります。ところがこの状態でも、WMIクエリではインストール済みとして結果が返ってきてしまいます。

    このため、当初はWMIクエリによりチェックして、インストールされていない場合だけ実行するようにしていたのですが、この条件をはずしIE11をインストール後無条件に実行するようにしています。

これで、IE11をインストールするひととおりのタスクシーケンスが出来ました。あとは、これを「利用可能」としてデプロイし、ユーザーに実行してもらうだけです。
もちろん、「必須」でデプロイしてバックグラウンドで実行しても構いません。