Windows Updateがエンドレスで終わらない
Windows7のサポート期限が2020/01/14までと迫っているので、社内のパソコンをWindows10 Enterprise 2016 LTSB (ビルド1607)に入れ替えを進めているのですが、OSインストール後のアップデートが全然終わりません。「更新ファイルの確認」や「ダウンロード」、再起動時の「更新ファイルの適用」のどれもがめちゃくちゃ遅いので困っています。 OSインストールからWindows Updateを最新まで更新するのに1台3日とかかかりました。
そこでサクッとコマンドでオフラインインストールするいい方法が見つかったのでメモ。
まずは更新ファイルをダウンロード
下準備として適用させたい更新ファイル(KB*******.msu)をWindows Updateカタログからダウンロードしてきてください。
Windows 10 バージョン 1607の更新ファイルの最新を確認する
ダウンロードすると言ってもどれをダウンロードすればいいかわからない場合、以下のページからとりあえず最新のKB番号の物をダウンロードしてみるといいかもしれません。事前に必要なサービス スタック更新プログラム(SSU)があればそれも合わせてダウンロードしてみてください。
ちなみにWindows 10 Enterprise 2019 LTSCの場合はWindows 10 Version 1809用の更新ファイルを探してください。
WUSAコマンドでインストール
コマンドでインストールする方法はいくつかありますが、一番シンプルなのはWUSA.exeでファイルを指定する方法です。しかし、これがうまくいかないことがありますので、その際は以下のDism.exeやPkgmgr.exeからインストールする方法を試してください。
wusa "c:\windows10.0-kb4486129-x64.msu" /passive /norestart
/passive
はGUIでインストール状況が見て分かるのですが、/quiet
に変更して無人応答にするとインストールが終わったのか、まだインストール中なのかわからないので、インストール中なのに終わったと思って再起動をしないように注意してください。/norestart
を削除してインストール後に再起動をするようにしておけばインストールが完了したかどうかわかりやすいです。その場合は/quiet
と合わせて再起動するコマンドスイッチの/warmrestart
、/promtrestart
、/forcerestart
のいずれかを指定します。
DISMコマンドでインストール実行
例えば、「x64 用 Windows 10 Version 1607 および Server 2016 の、Microsoft .NET Framework 4.8 (KB4486129)」をCドライブ直下にwindows10.0-kb4486129-x64.msuと保存した場合、インストールするコマンドは以下のようになります。PowerShellまたはコマンドプロンプト(管理者)から実行できます。
dism /online /add-package /PackagePath:"c:\windows10.0-kb4486129-x64.msu" /NoRestart
/NoRestart
は再起動を必要とする更新プログラムをインストール際に自動的に再起動させないようにするためのオプションスイッチです。不要な場合は削除してください。
うまくいかないときはEXPANDコマンドで解凍してからインストール
更新プログラムによってはDISMコマンドで.MSUファイルを指定するとエラーになるものがあります。その際はEXAPNDコマンドで.MSUファイルを解凍して出てきたキャビネットファイル(.CAB)を使ってインストールするとうまくいきます。
expand /f:* "c:\windows10.0-kb4486129-x64.msu" "c:\" dism /online /add-package /PackagePath:"c:\windows10.0-kb4486129-x64.cab" /NoRestart
インストールが終わると再起動するかどうかの確認メッセージが表示をさせたい場合、/NoRestart
を削除してください。
pkgmgr.exeを使った方法もある
以下の方法でもインストールできます。Dismと違ってPkgmgrの場合は.XMLファイルを指定します。この.XML ファイルも.CAB同様に.MSUファイルを解凍した中にあります。
expand /f:* "c:\windows10.0-kb4486129-x64.msu" "c:\" pkgmgr.exe /n:"c:\windows10.0-kb4486129-x64.xml" /quiet /norestart
/norestart
があるとインストールが終わったかわからないので、削除して/quiet
だけで実行すると再起動が必要な更新プログラムの場合、インストール完了後は自動的に再起動されます。
複数の更新プログラム(.MSU)をまとめてインストールするバッチファイル
メモ帳に貼り付け、All_KB_Install.batなど適当に名前を保存します。このバッチファイル以下の階層に保存したすべての.MSUファイル(サブフォルダも含む)を順番に連続でインストールします。@echo off setlocal enabledelayedexpansion :: 開始確認 set /p YORN="更新ファイルのインストールを開始します。 (y/n):" if not '%YORN%'=='y' ( echo "処理を中止します。" GOTO END ) :: Windows Update関連のサービスをSTOP net stop usosvc net stop dosvc net stop wuauserv net stop cryptSvc net stop bits net stop msiserver if %PROCESSOR_ARCHITECTURE% equ x86 ( set BIT=x86 ) else ( set BIT=x64 ) :: 解凍先フォルダ作成 set TEMP=%~dp0ExtractKB md "%TEMP%" :: .MSUファイルを解凍 for /r "%~dp0" %%i in (*!BIT!.msu) do ( set KBFILE=%%i echo. expand /f:* "!KBFILE!" "%TEMP%" ) :: .CABファイルからインストール for /r "%~dp0" %%j in (*!BIT!.cab) do ( set CABFILE=%%j echo. dism /online /add-package /PackagePath:"!CABFILE!" /NoRestart ) :: 解凍先フォルダ削除 rd /s /q "%TEMP%" :: Windows Update関連のサービスをSTART net start msiserver net start bits net start cryptSvc net start wuauserv net start dosvc net start usosvc echo. echo インストール終了しました。10秒後に再起動します。 echo. shutdown.exe /r /t 10 :END exit
その他参考サイト
Windows10の「Windows Updateが遅い・終わらない」問題で、今回のDISMコマンドを使用する参考例や、それ以外の方法の参考ページをメモ。