Home > Windows にまつわる e.t.c.

Windows Server 2016 インストール メディア に KB を適用する


インストールメディアから OS をインストールした後に、Windows Update とか、特定の KB をインストールする運用が一般的ですが、これが意外と手間です。

Windows Update はスクリプトで自動化できるのですが、インストールに時間のかかる KB を事前にインストールメディアに仕込んでおくと、構築時間短縮になりますね。

Windows Server 2016 評価版を例に、KB のオフライン適用方法を解説します。

 

適用されている KB を調べる

まずは、Get-HotFix コマンドレットで Windows Update 済みの Windows Server 2016 評価版 に適用されている KB を確認します。

PS C:\> Get-HotFix

Source        Description      HotFixID      InstalledBy          InstalledOn
------        -----------      --------      -----------          -----------
WSV12         Update           KB3176936     NT AUTHORITY\SYSTEM  2016/10/02 0:00:00
WSV12         Update           KB3192137                          2016/09/12 0:00:00
WSV12         Update           KB3197356     NT AUTHORITY\SYSTEM  2016/10/08 0:00:00

 

このうち、InstalledBy が無い KB3192137 は、インストールメディアにあらかじめ入っているの KB なので無視します。

初期 Windows Update で時間がかかるのが KB3176936 です。

https://support.microsoft.com/ja-jp/kb/3176936

 

この KB を適用する前に役割をインストールすると、Windows Update がエラーになった経験があるので、こいつは少なくともインストーしておきたいです。

これを書いている 2016年10月10日現在で、KB3197356 もインストールされています。

https://support.microsoft.com/ja-jp/kb/3197356

 

Windows Server 2016(Windows 10 も)は、累積アップデートが提供されているので、最終的に残っている KB をインストールすれば、Windows Update 不要になります。
とはいえ、毎月の更新を ISO に適用するのも大変なので、KB3176936 以外も適用するかは、これを読んでいる方の判断にお任せします。
(自動化手法模索中)

とりあえず、今回は KB3176936 と KB3197356 を適用してみます。

 

事前準備

ISO イメージ にオフラインで KB を適用するには以下の事前準備が必要です。

・インストールメディア(ISO)入手と展開

・適用する KB のインストーラ入手

・WADK インストールとWindows PE 環境展開

KB 適用は、Windows Server 2016 上で作業すると色々面倒があるので、Windows 10 x64 上で作業します。

今回は D:\work を作業ディレクトリにする想定で解説します。

 

インストールメディア(ISO)入手と展開

ISO ファイルのままだと、KB の適用が出来ないので、インストールメディアの中身をすべて展開フォルダーにコピーします。

今回は D:\work を作業ディレクトリにするので、D:\work\ISO にコピーします。

 

適用する KB のインストーラ入手

Windows Update で配布された KB は Microsoft Update カタログから入手できます。

Microsoft Update カタログ は、IE にアドオンをインストールするので、IE でアクセスします。
(EMET をインストールしている環境だとアドオンのインストールが拒否られるので、EMET が入っていない環境でダウンロードします。)

Microsoft Update カタログ
http://catalog.update.microsoft.com/v7/site/Home.aspx

 

ダウンロードする KB を検索して、Windows Server 2016 用の KB 選択し、ダウンロードします。

検索と追加

バスケットに入っている KB をダウンロード

 

ダウンロードした .msu を D:\Work\KB にコピーします。
(KB は .cab 形式も使えます)

 

WADK インストールとWindows PE 環境展開

KB 適用済みの ISO ファイルを作るために WADK をインストールし、copype amd64 D:\work\PE_x64 をして Windows PE 環境展開しておきます。

Windows ADK のダウンロード - Windows ハードウェア デベロッパー センター
https://developer.microsoft.com/ja-jp/windows/hardware/windows-assessment-deployment-kit

 

インストール

Deployment Tool と Windows PE をインストール

 

WADK のインストールが完了したら、展開およびイメージング ツール環境 で、Windows PE 環境を D:\Work\PE_x64 に展開します。

展開およびイメージング ツール環境

copype amd64 D:\work\PE_x64

 

オフラインで KB を適用

インストールイメージの確認

Windows Server 2016 試用版のインストールメディアには、複数のインストールイメージが入っているので、どのイメージに KB を適用するかを確認します。

Dism /Get-ImageInfo /ImageFile:D:\work\ISO\sources\install.wim

 

PS C:\> Dism /Get-ImageInfo /ImageFile:D:\work\ISO\sources\install.wim

展開イメージのサービスと管理ツール
バージョン: 10.0.14393.0

イメージの詳細: D:\work\ISO\sources\install.wim

インデックス: 1
名前: Windows Server 2016 Standard Evaluation
説明: このオプション (推奨) を選択すると、ほとんどのサーバーの役割とアプリケーションを実行するために必要な構成のみをイン
ストールし、管理と保守のコストを削減します。GUI は含まれませんが、Windows PowerShell または他のツールを使用して、ローカ
ルまたはリモートでサーバーを完全に管理できます。「Windows Server のインストール オプション」を参照してください。
サイズ: 9,103,798,016 バイト

インデックス: 2
名前: Windows Server 2016 Standard Evaluation (デスクトップ エクスペリエンス)
説明: このオプションは、Server Core インストール上では実行できないアプリケーション用に下位互換性を提供する場合など、GUI
が必要なときに便利です。すべてのサーバーの役割と機能がサポートされています。「Windows Server のインストール オプション」
を参照してください。
サイズ: 15,123,743,136 バイト

インデックス: 3
名前: Windows Server 2016 Datacenter Evaluation
説明: このオプション (推奨) を選択すると、ほとんどのサーバーの役割とアプリケーションを実行するために必要な構成のみをイン
ストールし、管理と保守のコストを削減します。GUI は含まれませんが、Windows PowerShell または他のツールを使用して、ローカ
ルまたはリモートでサーバーを完全に管理できます。「Windows Server のインストール オプション」を参照してください。
サイズ: 9,168,992,714 バイト

インデックス: 4
名前: Windows Server 2016 Datacenter Evaluation (デスクトップ エクスペリエンス)
説明: このオプションは、Server Core インストール上では実行できないアプリケーション用に下位互換性を提供する場合など、GUI
が必要なときに便利です。すべてのサーバーの役割と機能がサポートされています。「Windows Server のインストール オプション」
を参照してください。
サイズ: 15,141,522,469 バイト

操作は正常に完了しました。

 

今回は Windows Server 2016 Datacenter Evaluation (デスクトップ エクスペリエンス) に KB 適用するので、インデックスは4です。

 

イメージをマウントする

インデックスがわかったので、イメージをマウントして KB を適用するのですが、その前にマウントしたイメージを一時的に展開する作業ディレクトリ(D:\work\offline)を作成しておきます。

md D:\work\offline

 

作業ディレクトリが作成出来たらイメージをマウントします。

Dism /Mount-Image /ImageFile:D:\work\ISO\sources\install.wim /Index:4 /MountDir:D:\work\offline

 

PS C:\> Dism /Mount-Image /ImageFile:D:\work\ISO\sources\install.wim /Index:4 /MountDir:D:\work\offline

展開イメージのサービスと管理ツール
バージョン: 10.0.14393.0

イメージをマウントしています
[==========================100.0%==========================]
操作は正常に完了しました。

 

KB の適用

マウントしたイメージに対して KB3197356 を適用します。(結構時間かかります)

Dism /Image:D:\work\offline /Add-Package /PackagePath:D:\Work\KB\AMD64-all-windows10.0-kb3197356-x64_494e8e0044697e7ded8d75fe65a33cc521a938f1.msu

 

PS C:\> Dism /Image:D:\work\offline /Add-Package /PackagePath:D:\Work\KB\AMD64-all-windows10.0-kb3197356-x64_494e8e0044697e7ded8d75fe65a33cc521a938f1.msu

展開イメージのサービスと管理ツール
バージョン: 10.0.14393.0

イメージのバージョン: 10.0.14393.0

1 / 1 を処理しています - パッケージ D:\Work\KB\AMD64-all-windows10.0-kb3197356-x64_494e8e0044697e7ded8d75fe65a33cc521a938f1.msu を追加しています
[==========================100.0%==========================]
操作は正常に完了しました。

 

ついでに、KB3176936 も適用します。

Dism /Image:D:\work\offline /Add-Package /PackagePath:AMD64-all-windows10.0-kb3176936-x64_5cff7cd74d68a8c7f07711b800008888b0fa8e81.msu

 

KB 適用済みのイメージのアンマウント

KB 適用済みのイメージをアンマウントします

Dism /Unmount-WIM /MountDir:D:\work\offline /Commit

 

PS C:\> Dism /Unmount-WIM /MountDir:D:\work\offline /Commit

展開イメージのサービスと管理ツール
バージョン: 10.0.14393.0

イメージ ファイル : D:\work\ISO\sources\install.wim
イメージ インデックス : 4
イメージを保存しています
[==========================100.0%==========================]
イメージのマウントを解除しています
[==========================100.0%==========================]
操作は正常に完了しました。

 

ISO ファイルの作成

これで D:\work\ISO\sources\install.wim が更新されたので、BIOS/UEFI 対応の ISO ファイルにします。

oscdimg -m -o -u2 -udfver102 -bootdata:2#p0,e,bD:\work\PE_x64\fwfiles\etfsboot.com#pEF,e,bD:\work\PE_x64\fwfiles\efisys.bin D:\work\ISO D:\work\WS16Eva_jp_Update_20161009_InstallMedia.iso

 

PS C:\> . "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\Oscdimg\oscdimg.exe" -m -o -u2 -udfver102 -bootdata:2#p0,e,bD:\work\PE_x64\fwfiles\etfsboot.com#pEF,e,bD:\work\PE_x64\fwfiles\efisys.bin D:\work\ISO D:\work\WS16Eva_jp_Update_20161009_InstallMedia.iso

OSCDIMG 2.56 CD-ROM and DVD-ROM Premastering Utility
Copyright (C) Microsoft, 1993-2012. All rights reserved.
Licensed only for producing Microsoft authorized content.


Scanning source tree (1000 files in 98 directories)
Scanning source tree complete (1127 files in 107 directories)

Computing directory information complete

Image file is 6218350592 bytes (before optimization)

Writing 1127 files in 107 directories to D:\work\WS16Eva_jp_Update_20161009_InstallMedia.iso

100% complete

Storage optimization saved 11 files, 667648 bytes (0% of image)

After optimization, image file is 6220230656 bytes
Space saved because of embedding, sparseness or optimization = 667648

Done.

 

これで、KB 適用済みの ISO ファイルの完成です。

この ISO ファイルで Windows Server 2016 試用版をインストールして、Windows Update しても、Windows Defender 系の更新以外は降ってこないようになっています。

 

PowerShell スクリプトで更新する

全てのイメージを PowerShell で更新するのなら、以下のスクリプトを使うと良いでしょう。

$RootDirectory = "D:\work"                                  # 作業ディレクトリ
$ISO = Join-Path $RootDirectory "ISO"                       # ISO 展開先
$KB = Join-Path $RootDirectory "KB"                         # 適用 KB
$Offline = Join-Path $RootDirectory "offline"               # オフライン KB 適用作業場所
$WindowsPE = Join-Path $RootDirectory "PE_x64"              # PE 展開先
$OutputISO = Join-Path $RootDirectory "WS16Eva_JA_WU.ISO"   # 出力 ISO ファイル名

# oscdimg.exe の場所
$oscdimg = "C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64\Oscdimg\oscdimg.exe"

# 適用する KB 取得
[array]$KBs = Get-ChildItem $KB\*.msu -Recurse

# オフライン KB 適用作業場所 が無かったら作成
if( -not (Test-Path $Offline )){ md $Offline }

# install.wim の場所
$InstallWim = Join-Path $ISO "sources\install.wim"

# install.wim に収納されいるインデックスの最大値を取得
$Logs = Dism /Get-ImageInfo /ImageFile:$InstallWim
$MaxIndex = 0
foreach( $Log in $Logs ){
    
    # マッチング文字
    $MatchString = "インデックス:"
    
    # 文字列ヒット
    if ( $Log -match "(?<Index>$MatchString *[0-9]+)"){
        # ヒットした文字列からマッチング文字を削除
        $SelectData = $Matches.Index -replace $MatchString, ""
        
        # 数値にする
        [int]$TmpIndex = $SelectData.trim()
        
        # 最大値保存
        $MaxIndex = [System.Math]::Max( $MaxIndex, $TmpIndex )
    }
}

# 全イメージに KB 適用
for( $Index = 1; $index -le $MaxIndex; $Index++ ){
    # イメージマウント
    Dism /Mount-Image /ImageFile:$InstallWim /Index:$Index /MountDir:$Offline

    # KB 適用
    foreach( $KB in $KBs ){
        $KBFullName = $KB.FullName
        Dism /Image:$Offline /Add-Package /PackagePath:$KBFullName
    }

    # イメージマウント解除
    Dism /Unmount-WIM /MountDir:$Offline /Commit
}

# ISO ファイル出力
. $oscdimg -m -o -u2 -udfver102 -bootdata:2#p0,e,b$WindowsPE\fwfiles\etfsboot.com#pEF,e,b$WindowsPE\fwfiles\efisys.bin $ISO $OutputISO

 

 

関連情報

Windows インストールメディアにドライバーを追加する
http://www.vwnet.jp/Windows/WS12R2/AddDriver/AddDriver2ISO.htm

Windows Server新規インストールの自動応答ファイルの作り方
http://www.vwnet.jp/Windows/WS12R2/2016072001/new_install__untitled.htm

フルオートでWindows Updateする
http://www.vwnet.jp/Windows/PowerShell/FullAutoWU.htm

Windows Server / Windows Client OS のカスタム インストール メディアを作成する
http://www.vwnet.jp/Windows/WS16/2017070901/EditISO.htm 

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.