Windowsマシンで奇妙なシステムクラッシュ、頑固なエラー、あるいは何かがうまく動作しないといった問題に遭遇したことがある場合は、システムファイルの整合性が損なわれている可能性があります。SFC (システムファイルチェッカー)コマンドとDISMコマンドを使用すると、破損したシステムファイルやコンポーネントストア(Windowsの重要なデータが保存されている場所)を修復できます。これらのツールは、特にマルウェア感染、アップデートの失敗、あるいはWindowsの動作が不安定で正常に起動しない場合など、システムの安定性を確保するための最初の対応者のような存在です。
基本的に、まずSFCを実行して、不足しているファイルや破損したファイルをスキャンし、置き換えます。それでもうまくいかない場合は、DISMがWindowsイメージ自体を修復します。これは、家全体を建て直す前に壊れた基礎を修理するようなものです。場合によっては、エラーのためにSFCですべてを修復できないことがあります。そのような場合は、DISMコマンド、特に/RestoreHealthの実行が重要になります。これはWindowsのチューンアップ、そしてできれば正常な状態への復元だと考えてください。
SFCとDISMを使ってシステムファイルの問題を修正する方法
SFC /scannow を使用して保護されたシステムファイルを確認する
まず、管理者権限でコマンドプロンプトを起動してくださいsfc /scannow(もちろん、管理者として実行してください)。このツールは、保護されているすべてのWindowsファイルをスキャンし、破損または欠落しているファイルをWindowsコンポーネントストア(C:\Windows\WinSxS)にある正常なコピーに置き換えることで、問題の修復を試みます。ログは に保存される%windir%\logs\cbs\cbs.logので、必要に応じて詳細を調べることができます。SFCアクティビティを素早くフィルタリングするには、以下を実行してください。
findstr /c:"[SR]" %windir%\Logs\CBS\CBS.log >"%userprofile%\Desktop\sfc.txt"
これにより、SFC で何が修正され、何が修正されなかったかをより明確に把握できます。まれに、スキャンの結果が「Windows リソース保護によって破損したファイルが見つかりましたが、一部は修正できませんでした」と報告されることがあります。その場合、DISM が役立ちます。
DISM /CheckHealth で Windows コンポーネント ストアの正常性をチェックする
SFCスキャンが失敗したり、解決できない問題が報告されたりした場合は、 を実行してくださいDISM /Online /Cleanup-Image /CheckHealth。このコマンドは1分もかからず、Windowsイメージが破損しているかどうかを確認するだけです。変更は行われず、簡単なヘルスチェックのみが行われます。「コンポーネントストアの破損は検出されませんでした」と表示されれば問題ありませんが、そうでない場合は を実行する必要があるかもしれませんDISM /Online /Cleanup-Image /ScanHealth。このコマンドはかなり徹底的なスキャンを起動し、システムによっては最大30分かかる場合があります。
あるマシンでは「すべて正常」と表示されたのに、別のマシンでは潜在的な問題が報告されました。Windowsが予測不可能なのはご存じの通りです。エラーが見つかった場合は、次の手順で修復する必要があります。
DISM /RestoreHealthでイメージ破損を修復する
これが大物です。Windows DISM /Online /Cleanup-Image /RestoreHealthUpdateから新しいファイルをダウンロードしてWindowsイメージの修復を試みます(ローカルソースを使用している場合を除き、インターネット接続が必須です)。修復には時間がかかる場合があり、30分以上かかることもありますので、辛抱強く待ちましょう。修復が完了すると、「復元操作は正常に完了しました」のように、修復が成功したかどうかが表示されます。
ソースファイルが見つからない場合、またはDISMが失敗した場合
インターネット接続がない、プロキシの問題、Windows Update の問題などにより PC からファイルをダウンロードできない場合、DISM は 0x800f0906 や 0x800f0950 などのエラーをスローします。この問題を解決するには、DISM を Windows インストール メディアなどのローカル ソースに設定する必要があります。ローカル ソースとは、マウントされた ISO イメージ、回復ドライブ、またはinstall.wimまたはinstall.esdイメージを含むフォルダーなどです。例えば、以下のようになります。
DISM /Online /Cleanup-Image /RestoreHealth /Source:wim:D:\sources\install.wim:6 /LimitAccess
ImageIndex(ここでは6)がWindowsのバージョンに対応していることを確認してください。WindowsのバージョンはPowerShellで確認できます。
Get-ComputerInfo | select WindowsProductName, WindowsEditionId, WindowsVersion, OSDisplayVersion
そして、次のようにして WIM ファイル内のイメージを一覧表示します。
Get-WindowsImage -ImagePath "D:\sources\install.wim"
DISM が Windows Update からダウンロードを試行しないようにするには、場合によっては /LimitAccess スイッチを指定してコマンドを実行する必要があります。ソースイメージは、インストールされている Windows のバージョンとビルドと一致している必要があります。一致していないと、修復が拒否される可能性があります。
PowerShell の Repair-WindowsImage コマンドレットを使用する
PowerShell をお使いの場合は、同様のコマンドセットがあります。実行してRepair-WindowsImage -Online –ScanHealth問題がないか確認し、問題が見つかった場合はRepair-WindowsImage -Online -RestoreHealth修正に使用します。-Sourceパラメータを追加すると、必要に応じてローカルの WIM/ESD を参照できます。DISM に似ていますが、PowerShell のエコシステムに統合されています。
オフライン修復 – Windowsが起動しない場合
Windowsが起動しない場合は、メディア作成ツールをインストールした起動可能なUSBまたはDVDを使用してリカバリモードで起動し、コマンドプロンプトにアクセスできます。そこから以下の手順を実行してください。
diskpartWinPE では異なる場合があるため、Windows パーティションに割り当てられたドライブ文字を識別するために使用します。sfc /scannow /offbootdir=C:\ /offwindir=C:\Windowsオフライン ドライブ上のシステム ファイルを検証するために実行します。- 次に、次のようなコマンドでオフライン イメージを修正します。
Dism /Image:C:\ /Cleanup-Image /RestoreHealth /Source:D:\sources\install.wim
スペースが限られている場合は、スクラッチ ディレクトリを作成する必要があるかもしれません。
mkdir F:\scratch
Dism /Image:C:\ /Cleanup-Image /RestoreHealth /Source:D:\sources\install.wim /ScratchDir:F:\scratch
これらの手順は面倒ですが、システムが完全に壊れていて Windows を正常に起動できない場合には有効です。
まとめ
- まずは実行し
sfc /scannow、可能なものは修正します。 - でイメージの健全性を確認します
DISM /Online /Cleanup-Image /CheckHealth。 - エラーが表示された場合は、 で修復します
DISM /Online /Cleanup-Image /RestoreHealth。 - ファイルをダウンロードできない場合は、ローカル ソース (install.wim または ISO) を見つけます。
- オフラインで修正する場合は、リカバリを起動し、そこから DISM コマンドを実行します。
C:\Windows\Logs\CBS\CBS.log問題が発生した場合は、詳細なエラーについてはログを確認してください。
まとめ
正直なところ、これらのツールをいじるのはワンクリックで解決できるわけではありませんが、Windowsの動作がおかしくなったときに、完全な再インストールをせずに正常な状態に戻すための最初のステップとなることがよくあります。ただし、スキャンには時間がかかる場合があるので、辛抱強く待ちましょう。少なくとも1つの環境では、DISMまたはSFCを実行することで、他の方法では修復できなかった10年前の破損を修復できました。これで、誰かの頭を悩ませる数時間を救うことができれば幸いです。