かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  vol.29 Windowsのオフラインパッチ|続・ラボ環境 on Azure(1)

 

 

vol.29 Windowsのオフラインパッチ|続・ラボ環境 on Azure(1)

2024年07月22日配信
2024年07月22日更新
執筆者:山内 和朗

 Windows Updateはトラブルが無ければよいのですが、トラブルが発生してしまうとその解決に多くの時間がとられる場合があります。まれに原因不明のインストール失敗、ダウンロードとインストールが何時間も進まない、再起動後のクラッシュのループ、クラッシュのループからの自動回復失敗といったケースに遭遇することがあります。トラブルシューティングの方法はいくつかありますが、あまり知られていないオフラインパッチを紹介します。

 

更新トラブルを回避できるかもしれないオフラインパッチ

 

 現在、サポートされているWindowsバージョンは、オフラインのイメージに対する更新プログラムのインストールをサポートしています。これを「オフラインパッチ」と呼ぶことにしましょう。オフラインパッチには、DISMコマンドによるオフラインイメージに対する更新プログラムのインストール方法を使用します。

 オフラインパッチは第3のOSで物理/仮想マシン(VM)を起動して行う方法と、仮想マシンのVHD(x)をローカルマウントして行う方法があります。物理マシン(および仮想マシン)の場合、第3のOS環境としてローカルから起動できる「Windows回復環境(Windows Recovery Environment≪Windows RE、WinRE≫」やインストールメディアから起動できる「Windowsプレインストール環境(Windows Preinstallation Environment≪Windows PE、WinPE≫」があります。更新対象がHyper-V VMの場合は、VHD(x)をHyper-Vホストのローカルドライブまたはローカルパスにマウントして行うことができます。

 オフラインパッチはゲストOSを起動せずに行うため、ゲストOSの動作の何らかの影響によるWindows Updateのトラブルは、オフラインパッチで回避できる場合があります。通常の方法でWindows Updateがうまくいかない場合、一般的な方法でWindows Updateのトラブルを解決できない場合、オフラインパッチはOSのリセットや再インストールという最後の手段の前にやってみる価値のある手段です。

 

WinRE(WinPE)からのオフラインパッチ

 

 オフラインパッチを行うには、あらかじめMicrosoft Updateカタログからインストールしたい更新プログラムの「MicrosoftUpdateスタンドアロンパッケージ(.msu)」(MSUパッケージ)をダウンロードしておきます。ダウンロードするべきMSUパッケージは、Windows Updateで最新に更新されている、同じバージョンを実行しているWindowsマシンのWindows Updateの「更新の履歴」や、コントロールパネルの「プログラムと機能¥インストールされた更新プログラム」から判断することをお勧めします。.NET Frameworkの累積的な更新プログラムは、インストールされている.NET Frameworkのバージョンによって、必要なMSUパッケージが異なることに注意してください。

 更新対象のWindowsが起動している場合は、ローカルディスクの分かりやすい場所に更新プログラムのMSUパッケージをダウンロードしておきます。あるいは、USBメモリなどに保存しておきます。すべての更新プログラムをオフラインパッチできるわけではありませんが、Windowsや.NET Frameworkの累積的な更新プログラムならオフラインパッチで対応可能です。

 WinREまたはWinPEからオフラインパッチを行うには、更新対象のWindowsマシンをWinRE(※1)またはWinPE(※2)で起動し、コマンドプロンプトを開きます。まず現在、オフラインになっているWindowsのWindowsパーティションのドライブを調べます(¥Windowsフォルダーがあるドライブ)。dirコマンドであたりを付けて実行してみるのでもよいですし、DISKPARTコマンドで調べることもできます。「WMIC logicaldisk get deviceid, volumename」コマンドで調べることもできます。

※1 WinREが有効になっている稼働中のWindowsマシンをWinREで起動するには、[Shift]キーを押しながら再起動操作(デスクトップエクスペリエンスの場合)を開始するか、コマンドプロンプトから「reagentc /boottore & shutdown /r /t 0」を実行します。「オプションの選択」画面が表示されたら、「トラブルシューティング」、「コマンドプロンプト」の順に進みます。Windowsが正常に起動しない場合は、複数回の失敗後に実行される「自動修復」の後の「オプションの選択」画面から、「トラブルシューティング」、「コマンドプロンプト」の順に進みます。

 

※2 Windowsのインストールメディアから起動し、「Windowsセットアップ」や「Microsoftサーバーオペレーティングシステムのセットアップ」が表示されたら、[Shift]+[F10]キーを押して、WinPEのコマンドプロンプトを呼び出します。または、「今すぐインストール」の画面まで進み、「コンピューターを修復する」、「トラブルシューティング」、「コマンドプロンプト」の順に進みます。

 Windowsパーティションのドライブ文字が分かったら、次のコマンドラインを実行してDISMコマンドで更新プログラムをインストールし(複数の場合は更新プログラムごとに)、最後に再起動します(画面1)。なお、この例ではC:ドライブにWindowsパーティションがマウントされていることを想定していますが、WinRE/WinPE環境では必ずしもC:ドライブにマウントされるとは限りません。ちなみに、X:ドライブはメモリ上(RAMディスク)に展開された現在実行中のWinREまたはWinPEのイメージです。

X:\> DISM /Image:C:\ /Add-Package /PackagePath:<MSUパッケージのパス> /ScratchDir:<一時ディレクトリ(X:ドライブ以外)>
X:\> WPEUTIL Reboot

 

画面1

画面1 WinREまたはWinPEでWindowsマシンを起動し、コマンドプロンプトからDISMコマンドを使用して更新プログラムをオフラインのWindowsイメージに対して適用する

 

 オフラインパッチで更新されたWindowsが起動したら、Windowsの詳細なビルド番号(リビジョン番号)やコントロールパネルの「インストールされた更新プログラム」で、更新プログラムがインストールされたことを確認できるでしょう。なお、オフラインパッチでインストールされた更新プログラムはWindows Updateの「更新の履歴」には残りませんが、「インストールされた更新プログラム」や、Windows Update Agent(WUA) APIで取得できる履歴には残ります(参考: 「メモ. 再起動が完了するまでがWindows Updateのインストール」)。

 

画面2
画面2 再起動後、オフラインパッチによる更新プログラムのインストールが成功したことを確認する

 

問題のある更新プログラムのアンインストール

 

 WinREまたはWinPEからのオフラインパッチの方法は、問題のある更新プログラムのアンインストールにも利用できます。例えば、更新プログラムのインストール直後からWindowsの起動がクラッシュを繰り返すようになってしまった場合、この方法で更新プログラムをアンインストールすることで問題を回避できる場合があります。

 まず、WinREまたはWinPEのコマンドプロンプトでインストール済みの更新プログラムパッケージのパッケージIDを調べます。その後、DISMコマンドでそのパッケージを削除し、再起動します(画面3)。

X:\> DISM /Image:C:\ /Get-Packages
X:\> DISM /Image:C:\ /Remove-Package /PackageName:<パッケージID>
X:\> WPEUTIL Reboot


 Windowsの累積的な更新プログラムのパッケージIDは「Package_for_RollupFix_」から始まる「Security Update」です。個別の更新プログラムはのパッケージIDは「Package_for_KB」から始まる「Security Update」または「Update」です。.NET Frameworkの累積的な更新プログラムのパッケージIDは「Package_for_DotNetRollup_」から始まる「Security Update」です。「Package_for_ServicingStack_」から始まるサービシングスタックはアンインストールできません。インストール時刻を参考に、最後にインストールされた更新プログラムからアンインストールするようにしてください。

画面3
画面3 問題のある更新プログラムをオフラインでアンインストールする

 なお、Windows 10およびWindows 11の場合は、WinREの「トラブルシューティング」の詳細オプションにある「更新プログラムのアンインストール」から、最後にインストールされたWindowsの品質更新プログラム(累積的な更新プログラム)または機能更新プログラム(新バージョンへのアップグレード)をアンインストールすることができます。残念ながら、Windows ServerのWinREにはこのオプションは存在しません。DISMによるアンインストールは、Windows 10、Windows 11、Windows Serverのすべてで利用できます。

 

vol29_scr04a
画面4 Windows ServerではWinREのこのオプションを利用できないので、代わりにコマンドプロンプトからDISMを使用する

blog_subscribe

blog_comment

最新記事