[2016年Win10検証]MBSAを使用したWindowsUpdateのオフライン適用

以前、Winows7上で一度もネットワークに繋がずにWindowsUpdateを適用する「MBSAを使用したWindowsUpdateのオフライン適用」について書きました。おかげさまで非常に多くの方にお読みいただいています。

そこからもう4年も経った為、ビジネスでも主流となりつつあるWindows10にて同様にオフラインアップデートが可能か検証してみました。

はじめに

「WindowsUpdateをオフラインで当てたい」というのは大抵はお客様の要望だったり、こちらから「最新版まで適用済み」と納入時に書くのが目的でしょう。
そうなると具体的なゴールは「WindowsUpdateを実行しても『このWindowsは最新です』と表示されて追加アップデートが表示されないこと」になると思います。

今回、過去にやった手法のままこの状態まで仕上げられるかを順を追って検証しました。

その点だけでいえば結果は「ノー」です。

チェック

MBSAは2.3が最新

Microsoft Baseline Security Analyzer

最新バージョンは2.3はWindows8.1までしか対応リストにないため、Windows10は正式には非対応という事になります。ですが、インストール自体は問題はありません。

20160902-01

インストール後、チェックに使うカタログファイル(wsusscn2.cab)を用意する必要があります。MSのサイトからダウンロードすることもできますが、ネット接続可能な検証機があるなら一度MBSAを実行すると

に最新のwsusscn2.cabが保存されるのでそれでもOK。手動でダウンロードしたものと同一でした。

こうしてできたファイル3つ

  • mbsacli.exe(MBSAフォルダより)
  • wusscan.dll(  〃  )
  • wsusscn2.cab

を適当なフォルダに入れます。

チェック実行

コマンドプロンプトを管理者モードで開きます。通常モードで行うと「セキュリティのCABファイルが読み込めません」と表示されエラーになるので注意。

上記ファイルを入れたフォルダに異動したのち、MBSAのCLI版を実行します。

これでアップデートの有無がUpdatecheck.xmlとして書き出されました。

確認

XMLファイルの解読

出来上がったUpdatecheck.xmlはメモ帳でもブラウザでも表示できます。その中から

IsInstalled=”false”

と表示されているアップデートをインストールすればいいわけです。

ただし数が多くなってくると目でチェックするのはどうにもしんどい。なのでこの”IsInstalled”をキーとして必要なアップデートのURLのみを抜き出したテキストファイルを作ります。リストができればあとは手なりツールなりでダウンロード。

XMLファイルからの抜き出しは別途アプリ利用せずにPowerShellでやってみました。
(参考:PowerShellでXMLファイルの内容を検索する – Sanwa Systems Tech Blog)

管理モードでPowerShellを開き、Updatecheck.xmlのあるフォルダに移動してから以下を実行します。

1行目で.xmlファイルを読み込み。2行目で各要素のIsInstalledがfalseとなっているアップデートを見つけて、そこからDownloadURLを抜き出し、downloadlist.txtにファイルに出力しています。

これでdownload.txtに必要なファイルのダウンロードURLがリストアップされます。

この時、注意としてPowerShellのウィンドウが小さいとURLの最後が”…”で省略されてしまいます。ウインドウを出来る限り広げるほか、完成したファイルを確認してURLに拡張子まで含まれている事を確認しましょう。

ダウンロードは

自分はJDownloaderで一括ダウンロードしましたが、怪しいソフト(アドウェアが入っているパッケージが出回っていたり)なので、環境と相談して他のツールも考慮して下さい。

20160902-03

PowerShellでもInvoke-WebRequestコマンドレットを使う事でバッチ形式でダウンロードする事ができます。

一括適用

用意したファイルを実際のマシンに適用していきます。

ファイルは”.exe”,”.msu”,”.cab”の三種類。過去記事ではファイルを分解して一個一個・・・なんてやってましたが、素晴らしい方法を公開されている方がいました。

オフライン環境でWindows Updateのパッチを適用する方法(MBSA) – ピピローグ


■.msu
forfiles /p . /m *.msu /c “cmd /c wusa @path /quiet /norestart”

■.exe
forfiles /p . /m *.exe /c “cmd /c @path /quiet /norestart”

■.cab
forfiles /p . /m *.cab /c “cmd /c dism /online /add-package=@path /norestart”

forfilesコマンドを使ってフォルダ内の対象拡張子を一気に処理しています。
全部のアップデートを一つのフォルダに入れた後、コマンドプロンプトで上記3行を実行すればOK。

一つ注意として.exe用コマンドはディレクトリ内の全てのexeを実行するため、実行時のカレントディレクトリに注意するのと、アップデータ以外のexeが入っていない事を確認しておきましょう。

実行結果

注目の結果確認です。

サンプルとして”Windows 10 Enterprise Evaluation Build 4393.rs1_release.160805-1735”のVMを用意し、バックアップ&リストアしながら検証しました。

普通にアップデートした場合

対象のVMに「アップデートはありません」と表示されるまでWindowsUpdateを実行します。その状態を確認しました。

KB3176936とKB3176934が適用さてています。この状態までMBSAの組み合わせで実行できれば良いことになります

MBSAでアップデートした場合

一度VMをリストアしてMBSA実行しました。カタログ同期日時は” 2016-08-09T02:44:56Z”です。結果、検出された「適用の必要のあるアップデート」は3つ。

  1. MS11-025 Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージのセキュリティ更新 プログラム (KB2538243)
  2. MS16-095 x64 ベース システム用 Windows 10 Version 1607 の累積的な更新プログラム (KB3176495)
  3. 890830 Windows 8、8.1、10 と Windows Server 2012、2012 R2 x64 エディション用の、Windows 悪意のあるソフトウェア削除ツール – 2016 年 8 月 (KB890830)

20160902-02

これを手動て適用した結果

  1. KB2538243:MBSAではvcredist_x64を指定されるが、実際はvcredist_x86を探して入れないと解消されない。
  2. KB3176495:普通に適用できた。wmic qfeでも表示される。
  3. KB890830:インストールされるがwmic qfeでは結果表示されない。

そしてKB3176936とKB3176934は検出すらされない。

つまり、Windows10でMBSAでオフラインインストールしても、手動で行ったオンラインWindwsUpdateと同じアップデート結果にはならない

あとがき

今回の結果が全ての環境に当てはまる、とは断言できませんが概ね結果は同じような気がしています。試しにAnniversary Updateが当たる前の環境で試すと10個程が検出されますが、MBSAでは変わらず上記3つしか候補に出しません。

そうなる原因として考えられるのは

  • 配布カタログファイルとWindows10がマッチしてない
  • 参照するカタログが別にある
  • そもそも自分のMBSAの使い方が間違えている

くらいしか思いつきません。

結論を出すまで長々書きましたが、単なるMBSAの適用方法としては4年前よりも大分洗練できたと思います。Windows8.1までであれば有効な手順なのでまだまだ利用する場面も出てくるのではないかと。

Windows10に関して新しいツール、手法が出てないかはもうちょっと探してみます。もし見つかれば今後必要になると思うので試してみなくては。

コメントを残す