tmori3y2のブログ

主にWindowsのプログラムなど

MBSAで作成したリストからWindows 7 x64の146個のUpdateをセットアップ前のWindowsイメージに適用してみた

tmori3y2.hatenablog.com

前回は、ダウンロードまで行ったが、今回は

Add-WindowsPackage

を試した。

Windows Management Frameworkのインストール

Download Windows Management Framework 4.0 from Official Microsoft Download Center

のインストール。

Download Windows Management Framework 5.0 from Official Microsoft Download Center

実際には、こちらが最新のようだった。

DISMコマンドレットの有効化

Windows PowerShell での DISM の使用

毎回は面倒なので、PowerShellを起動したら自動でロードするように以下を参考に設定する。

[Active Directory] Active Directory モジュールを使用する | PowerShell from Japan!! Blog

ちなみに、Windows ADK for Windows 10 バージョン 1511のインストールがまだなら入れておくこと。

Mcafeeのアップグレード

これはかなりはまった。

McAfee KnowledgeBase - DISM.exe generates an Error: 5 or Access Denied when VSE 8.8 Access Protection is enabled

使用環境のVSEVSE 8.8.0 Path 4と古く、DISMでOSイメージ(VHD)のオフラインレジストリにアクセスすると、Mcafeeを無効にしていても失敗するというトラブルに見舞われた。

これについては、新しいパッチを適用するしかないようで、IT部門に相談してアップグレードした。

スナップショットの破棄とMBSAによるリストの再作成

Mount-WindowsImageではなく、VHDをそのままマウントして作業したので、Add-WindowsPackageが失敗した状態もすべて書き込んでしまった。一旦、スナップショットを削除して、OS Setup開始前の状態(DISM /Apply-Imageしたもの)に戻した。

VirtualBoxは、スナップショットをDISMでマウントしても問題なかったが、Hyper-Vはあまり詳しくないので、Hyper-VでチェックポイントファイルをDISMでマウントする場合は問題ないか調べてから作業するようにしてください。

のみインストールして、初期状態の更新リストを作成。

BlogSamples/Update1.xml at master · tmori3y2/BlogSamples · GitHub

Windows Updateファイルのダウンロード
  • ホストOSに更新ファイルリストをコピー(d:\mbsa\Update1.xml)
  • フォルダd:\Update1を作成
[xml]$xml = get-Content -Path d:\mbsa\Update1.xml
$xnavi = $xml.CreateNavigator()
$xnavi.Select("//UpdateData[@IsInstalled='false']//DownloadURL") | foreach-Object {Invoke-WebRequest -Uri "$_" -OutFile (Join-Path "d:\Update1" (Split-Path $_ -Leaf))}

今回は、適用済み1、更新が必要なのは149。

スナップショットの破棄とDISMでのマウント
  • スナップショットをOS Setup開始前のもの(DISM /Apply-Imageしたもの)に戻す(仮想マシンはシャットダウンのまま)
  • フォルダd:\offlineを作成

VHDをマウントすると自動で差分ディスクができる。この差分ディスクは、マウント解除時にマージか破棄を選べるので、必ずDISMでマウントすること。(というか、Mcafeeで失敗したときには分からなかったが、Updateを適用した最終フェーズでDISMでマウントしていないとエラーが出た・・・最初に出してくれよぉ)

  • スナップショットをDISMでマウント(VHDの場合、indexは1固定)

DISM を使った Windows イメージのマウントと変更 - Windows 10 hardware dev

Dism /Mount-Image /ImageFile:<スナップショットの.vhdファイルパス> /index:1 /MountDir:D:\offline

Mount-WindowsImage

Mount-WindowsImage –ImagePath <スナップショットの.vhdファイルパス> –Index 1 –Path D:\offline
DISMによるパッケージの適用

リストで繰り返し適用するからPowerShell必須と思いきや、フォルダ指定ができるので、コマンドプロンプトでもできる??

ただし、順番により、インストールに失敗していることがあるかは要検証。

DISM を使ってパッケージをオフラインで追加または削除する - Windows 10 hardware dev

Dism /Image:D:\offline /Add-Package /PackagePath:D:\Update1 /IgnoreCheck

Add-WindowsPackage

Add-WindowsPackage –Path "D:\offline" –PackagePath "D:\Update1" -IgnoreCheck

適用には約1時間かかった。

DISMによる日本語キーボードレイアウトの適用 (おまけ)

DISM によるオフラインでの言語パックの追加と削除 - Windows 10 hardware dev

DISM の地域と言語サービスのコマンド ライン オプション - Windows 10 hardware dev

Dism /Image:D:\offline /Set-LayeredDriver:6
イメージのマウント解除

DISM を使った Windows イメージのマウントと変更 - Windows 10 hardware dev

Dism /Unmount-Image /MountDir:D:\offline /commit

Dismount-WindowsImage

Dismount-WindowsImage –Path "D:\offline" -Save

コマンドを実行すると、差分ディスクのマージが実行される。

それなりの容量なので30分くらいはかかる。

起動とWindows Setup

起動すると、仮想マシンの環境に合わせてドライバがインストールされるが、Windows Updateは適用済みなので時間はかからない。

キーボードは日本語レイアウトで起動したが、デバイスマネージャでは106/109ではなく通常のPS/2ドライバになっていた。

更新リストは空だったが、プログラムの追加と削除の適用済みの更新は147モジュールだった。(うち一つは最初から適用済み)

数が合わないのは、.exeファイルは対象外になっているため。

あとは、スナップショットを結合すれば、最初からWindows Updateが適用されたSetup開始前のイメージができることになり、使いまわすときに時間短縮やトラブル回避が出来て便利である。

インストールが本当に成功しているかは、今後検証する予定。

今回は、カタログファイルを使って初期状態からのリストを作成したが、開発環境をセットアップ後に、Microsoft Updateに接続した場合なども試してみようと思う。

2016/05/18 追記

再起動後に、カタログファイルを指定してMBSAで再スキャンしても、10個くらいしか更新対象は増えない。

Windows Updateをオンラインで実行すると75個とかリストアップされるので、あくまでもミニマムでしかないようだ。

なお、Windows Update Agentを最新にして、再起動をかけてからでないと、更新の確認に死ぬほど時間がかかるのは相変わらずだった。