MBSAで作成したWindows 7 x64 (ほぼ初期状態)の更新リストのUpdateをPowerShellでダウンロード
2016/05/13 修正
職場にVS2015 Pro with MSDNを入れようかと思って、Windows 7 UltimateとWindows 10 Professionalの仮想環境を作ろうと思ったが、Windows Updateに失敗するという話があったので、MBSAで作成した更新リストを使って、ホストOSからDISMで一括適用を出来ないか調べてみた。
インストールやコマンドの実行は、こちらのサイトを参考にした。
まあ、先ずはWindowsのセットアップ。
職場はホストがWindows 7 Professional x64だが、最近、Windows 10に対応したWindows ADK for Windows 10 バージョン 1511を最小構成でインストールした。(まだなら入れておくこと)
PowerShellでのWindows Updateファイルのダウンロードには、PowerShell 3.0以上が必要なので、無いならホストOSにインストールしておく。(今回は3.0がインストールされていたので、そのまま使用。まだなら4.0以上がお勧め)
職場はVirtualBoxだけど、仮想ハードディスクへのWindows 7 with SP1 (x64)の展開は、Windows 10とほぼ一緒・・・
念のため、起動前にスナップショット(Hyper-Vで言うところのチェックポイント)を作成しておく。
キーボードの文字化けについても同じように対処して、IE11のインストールとMBSAに対応したWindows Updateエージェントのインストールを済ませる。
Windows Updateエージェントは、参考にしたサイトの以下のリンクのファイルに記載のURLから入手した。
http://update.microsoft.com/redist/wuredist.cab
(2016/05/18 最新版というのは誤り。MBSA 2.3リリース時点のものと思われる)
ここまでやったら、MBSAのインストール。
参考にしたサイトの手順で、インストールが終わったら、コマンドラインで以下を実行すると失敗して、Cacheフォルダができるので、cabファイルをコピーしてから、再実行して更新ファイルのリストを作成する。
cd /d "c:\Program Files\Microsoft Baseline Security Analyzer 2" mbsacli.exe /xmlout /unicode /nd /nvc > d:\mbsa\Update1st.xml
出来たファイルのXPathが以下のものをダウンロドすれば良いようだ。
- //UpdateData[IsInstalled='false']//DownloadURL
「XMLでスクリプトだと、PowerShellかな?多分・・・」
多分というのは、実はPowerShellは十指で数えるほどしか使っていない・・・
まあ、Google先生に聞けばよいので、xml powershellでググる。
morituriのブログ : powershellでXPathを使ってXMLファイルを読む
[xml]$xml = get-Content -Path d:\mbsa\Update1st.xml $xnavi = $xml.CreateNavigator()
xml開いて、XPathNavigetorを作成してから、ダウンロード対象は151あるので、取り敢えずダウンロード済みの奴で、コマンドの確認をする。
$xnavi.Select("//UpdateData[@IsInstalled='true']/Title") | Select Value
Value -------- MSXML 6.0 RTM セキュリティ更新プログラム (925673) x64 ベース システム Windows 7 用 Internet Explorer 11
$xnavi.Select("//UpdateData[@IsInstalled='true']//DownloadURL") | Select Value
Value -------- http://www.download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/msxml6-kb925673-enu-amd64_cc347d98b9fe1e... http://download.windowsupdate.com/c/msdownload/update/software/uprl/2013/10/wu-windows6.1-kb2533623-x64_40b1d8701721...
取り敢えずIE11がちゃんとインストールされているのが確認できた・・・
「あれ?切れる。コマンドライン文字数制限?・・・」
$navi.Select("//UpdateData[@IsInstalled='true']//DownloadURL") | Select Value | Out-File -FilePath d:\test.txt -Width 300
test.txt
Value -------- http://www.download.windowsupdate.com/msdownload/update/v3-19990518/cabpool/msxml6-kb925673-enu-amd64_cc347d98b9fe1e417cb73f0ddf004d1f94a4bfcf.exe http://download.windowsupdate.com/c/msdownload/update/software/uprl/2013/10/wu-windows6.1-kb2533623-x64_40b1d8701721bb016179d2fe1b42fb36594e4f86.exe
「うん、取れてる」
あとは、ダウンロード。これも数の少ない適用済みのもので確認。
かなり早いし、ダウンロードする間は開発を中断する必要もないので、なかなかいいかもしれない。
$xnavi.Select("//UpdateData[@IsInstalled='true']//DownloadURL") | foreach-Object {Invoke-WebRequest -Uri "$_" -OutFile (Join-Path "d:\WindowsUpdate" (Split-Path $_ -Leaf))}
実際に、ダウンロードするときは、//UpdateData/@IsInstalled='false'でダウンロード。
ところで、適用済みは.exeファイルなんだな・・・
気になって、インストールされていないものの.exeを調べてみた。
$xnavi.Select("//UpdateData[@IsInstalled='false']//DownloadURL") | Select Value | where-Object {$_.Value.Contains("exe") }
Value ----- http://download.windowsupdate.com/c/msdownload/update/software/secu/2015/01/mpsyschk_b2f2b1fe31b7ecec4ea43004bc4e2c7b7171b74f.exe http://download.windowsupdate.com/d/msdownload/update/software/uprl/2016/05/windows-kb890830-x64-v5.36_8c158268afa40e58b2fc516... http://download.windowsupdate.com/c/msdownload/update/software/secu/2015/01/mpsyschk_cb1fefac0669ab60ac983bda2202780a80a84d32.exe http://download.windowsupdate.com/c/msdownload/update/software/secu/2014/11/mpsyschk_2bbd60758fb5fe3e070dc308b2c59bd2d36aacad.exe http://download.windowsupdate.com/c/msdownload/update/software/secu/2014/04/mpsyschk_b6094da6a44231d66304c3912133742967b00f4f.exe http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/03/cleanupwindowsdefendertasks_89bb428f88ade6de4cf1f2... http://download.windowsupdate.com/msdownload/update/software/secu/2012/04/mpsyschk_479a484f94dee6cf64dc9525129bb402693112db.exe http://download.windowsupdate.com/c/msdownload/update/software/secu/2015/02/mpsyschk_0dfacff83493bec443c166008c5618afea04c729.exe
151の内、8つが.exe・・・
フォルダに年月があるから、フィルタしてDISMかけて、.exeはログインしてからインストールしたら良いんだろうか・・・
取り敢えず月曜までお預け。
ちなみに、今回のリストはWindows 7 Ultimate with SP1 JPN x64の初回のUpdateの分なので使いまわしが出来るはずです。
BlogSamples/Update1st.xml at Article_20160514A · tmori3y2/BlogSamples · GitHub
Update後に追加される分も含めて、公開していきますので、よかったら再利用してください。