Windows Update 後に OS 起動不可... Dism で解決するかもよ

Windows Update すると再起動が求められますが、なんらかの要因で再起動が正常に完了せず、OS が起動しなくなるときがあります。例えば、時間がかかりすぎて待ちきれず電源を強制的に落とした時とか。

今回は、Windows Update 後、OS が起動しなくなった時に実行しておくとよい Dism ツールのお話です。話が長くなるので、今回はよく使用する Dism ツールのコマンドを紹介し、実際のトラブルシューティングは、次回以降の投稿にまわそうと思います。

Dism は、コマンド プロンプトで実行する必要があります。コマンド プロンプトの実行方法は、過去に投稿しているので、そちらを確認してください。

https://qiita.com/ausamayuni/items/1a581eaec6e82e966419

## Dism (Deployment Image Servicing and Management) 
Dism ツール (Dism.exe) は、Windows イメージを管理するためのコマンドラインツールです。Dism ツールを使うと、Windows Update により適用された更新プログラムの確認や削除、更新プログラムの適用ができます。

回復環境等でも実行可能なので、Dism ツールを用いて更新プログラム適用を起因として発生する OS 起動不可問題のトラブルシューティングを実施することが可能です。

https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/what-is-dism

### コマンド 1. 更新プログラムの適用状況を確認
```bat
Dism /Image:C:\ /Get-Packages /Format:Table /ScratchDir:D:\
```
**/Image:C:\\**
Cドライブにあるオフラインの Windows イメージを指定しています。Windows OS が配置されているドライブが C 以外のドライブとしてマウントされている可能性があるので、D ドライブや E ドライブを指定する必要がある場合もあります。

**/Get-Packages**
このオプションは、指定したイメージにインストールされているすべてのパッケージの一覧を取得します。パッケージは、Windows Update や FoD など、システムにインストールされる更新プログラムや機能です。

**/Format:Table**
出力形式を指定します。この場合、出力を表形式（テーブル形式）で表示するように指定しています。見やすい形式で一覧を確認するのに便利です。Table ではなく List 形式の指定も可能です。

**/ScratchDir:D:\\**
一時ファイルや作業領域として使用するディレクトリを指定します。この例では、D ドライブにあるディレクトリが一時ファイル用の作業領域として指定されています。このオプションは大きな操作を行うときに便利で、より多くのディスクスペースが必要な場合に、システムドライブ以外のドライブを指定できます。

:::note info
**/ScratchDir:D:\\** オプションは指定しなくても問題ありませんが、実行時にエラーが発生する場合に備えて、最初から空き容量の大きいドライブを指定してオプションを付与しておいたほうがよいです。
:::

### コマンド 2. 更新プログラムの適用をキャンセルし、元に戻す
```bat
Dism /Image:C:\ /Cleanup-Image /RevertPendingActions /ScratchDir:D:\
```
**/Cleanup-Image**
イメージのクリーニングや修復に関連する操作を行うためのオプションです。このオプションに続いて具体的な操作を指定します。

**/RevertPendingActions**
インストール中の更新プログラムが原因で、システムの起動に問題が生じている場合、未完了のアクション（たとえば、まだ完全に適用されていない更新プログラム）を元に戻します。実行すると、適用途中の更新プログラムの処理が停止され、そのアクションが取り消されます。

### コマンド 3. 更新プログラムをアンインストール
```bat
DISM /Image:C:\ /Remove-Package /ScratchDir:D:\ /PackageName:<パッケージID> 
```
**/Remove-Package**
指定された更新プログラムを Windows イメージから削除できるオプションです。これは、問題を引き起こしている可能性のある更新プログラムを削除する際に使用します。

**/PackageName:<パッケージID>**
削除したいパッケージの ID を指定します。パッケージ ID は正確に指定する必要があり、前述した `Dism /Image:C:\ /Get-Packages /Format:Table /ScratchDir:D:\` の実行結果から確認できるパッケージ ID を使って特定の更新プログラムを指定します。

### コマンド 4. 更新プログラムをインストール
```bat
dism /image:C:\ /Add-Package /ScratchDir:D:\ /PackagePath:<msuファイルへのパス>
```
**/Add-Package**
指定されたパッケージを Windows イメージに追加するオプションです。これは Windows の更新プログラムや機能を追加するために使用されます。

**/PackagePath:\<msuファイルへのパス\>**
追加したい更新プログラム (.msuファイル) のパスを指定します。<msuファイルへのパス> の部分には、実際のパッケージファイルのパスを指定します。

更新プログラムの msu ファイルは公開されており、以下の Web サイトより KB 番号から検索・ダウンロードが可能です。

https://www.catalog.update.microsoft.com/Home.aspx

KB 番号は、各 OS の更新プログラムの説明がされている Web サイトで確認が可能です。

https://support.microsoft.com/en-us/topic/windows-10-update-history-8127c2c6-6edf-4fdf-8b9f-0f7be1ef3562

https://support.microsoft.com/en-us/topic/windows-11-version-23h2-update-history-59875222-b990-4bd9-932f-91a5954de434

https://support.microsoft.com/en-us/topic/windows-10-and-windows-server-2016-update-history-4acfbc84-a290-1b54-536a-1c0430e9f3fd

https://support.microsoft.com/en-us/topic/windows-10-and-windows-server-2019-update-history-725fc2e1-4443-6831-a5ca-51ff5cbcb059

https://support.microsoft.com/en-us/topic/windows-server-2022-update-history-e1caa597-00c5-4ab9-9f3e-8212fe80b2ee

## さいごに
次回は、これらの Dism ツールのコマンドを使用して、トラブルシューティングをしていきたいと思います。

ちなみに、`/image:C:\` を `/Online` に変更すれば、正常に起動している OS に対しても同様に Dism コマンドは実行可能です。また、/English オプションを使用すると実行結果が英語表記になります。