PowerShellとコマンドプロンプトを使用してWindows Updateの履歴を表示する方法

Windowsマシンにインストールされている更新プログラムを、以前は内蔵GUIを使って簡単に把握できました。しかし、Windows Update HistoryのGUIは、基本的な機能以外はあまり使い物になりません。表示されるのは基本的なリストのみで、検索もあまり使いやすくありません。そのため、トラブルシューティングや特定の更新プログラムのステータス確認を行う場合は、コマンドラインを使用することが多いでしょう。特に、古いwmicツールのサポートが段階的に終了しているため、なおさらです。このガイドでは、PowerShellから情報を素早く取得する方法、そして面倒な外部ソフトウェアを使わずにリモートマシンの更新プログラムを確認する方法を解説します。

アップデートがいつインストールされたか、特定のKBが存在するかどうかを正確に把握できれば、多くの手間を省くことができます。さらに、スクリプトを作成したり複数のPCを管理したりする場合、PowerShellを使えば作業がさらに楽になります。リストを出力したり、データをエクスポートしたり、個々のアップデートをチェックしたりするコマンドが登場し、GUIに固執することなく、トラブルシューティングを迅速化し、パッチの適用状況を把握できるようになります。

PowerShellとコマンドラインでWindows Updateを一覧表示および管理する方法

WMIC でコマンド プロンプトを使用する (旧式ですが便利です)

サポートが終了していなければ、 cmd.exewmic qfe list brief /format:tableのようなコマンドを簡単に実行できます。このツールを使えば、更新ID()、日付()、インストールしたユーザー()などの情報が得られます。しかし、ここで問題があります。MicrosoftはWindows 11 24H2以降、WMIベースのツールをデフォルトで無効化する計画を進めています。そのため、この方法は永久に機能しない可能性があり、新しいバージョンでも機能しない可能性があります。それでも、古い環境では手早く実行でき、問題なく動作します。HotFixIDInstalledOnInstalledBy

ヒント: NT AUTHORITY\SYSTEMユーザーには自動的にインストールされた更新プログラムが表示されますが、手動でインストールした場合は、多くの場合、自分や他のユーザーがリストされます。すべての更新プログラムでインストールされた日付が正確に表示されるわけではありません。日付のみが表示される場合や、形式が異なる場合があります。

PowerShell への切り替え: 新しい親友

ここからはより柔軟になります。PowerShellはGet-HotFix最新の代替ツールであり、更新情報の取得において非常に信頼性が高いです。PowerShellで以下を実行してください。

Get-HotFix | Select-Object HotFixID, InstalledOn, InstalledBy, Description | sort InstalledOn -Desc

これにより、最新のアップデートから順に、見やすくソートされたリストが表示されます。より詳細な情報が必要な場合や出力を調整する必要がある場合は、 Win32_QuickFixEngineeringクラスを使用することGet-CimInstanceもできます。これも同様に機能します。

Get-CimInstance -ClassName Win32_QuickFixEngineering | select HotFixID, InstalledOn | sort InstalledOn -Descending

後で確認したり共有したりするために、簡単にエクスポートしたいですか?次の手順を実行してください。

Get-HotFix | Format-Table -AutoSize > c:\temp\update_list.txt

KB5056578のような特定のアップデートをお探しですか?簡単です:

Get-HotFix -Id 'KB5056578'

マシンにアップデートが存在する場合にのみ情報を返します。リモートチェックの場合は、-ComputerNameパラメータを追加するだけです。

Get-HotFix -ComputerName wks1234
複数のマシンを管理している場合は、複数のコンピューターのチェックを自動化できます。ホスト名またはコンピューター名の配列のリストをループ処理し、該当するナレッジベースをチェックして、インストールされているかどうかを出力する簡単なスニペットを以下に示します。多くの環境で問題なく動作しますが、リモートマシンにアクセスできない場合や権限が適切でない場合は、エラーが発生する可能性があります。

$computers = @('comp1', 'comp2', 'comp3') $updateId = 'KB5056578' foreach ($computer in $computers) { $hotfix = Get-HotFix -ComputerName $computer -Id $updateId -ErrorAction SilentlyContinue if ($hotfix) { Write-Host "Update $updateId is installed on $computer." } else { Write-Host "Update $updateId is NOT installed on $computer." } }

最後に正常にインストールされたアップデートの日付を取得する

Windows が最後に更新プログラムを正常にインストールした時刻を知りたい場合は、次のコマンドを実行します。

Get-HotFix | sort InstalledOn -Desc | select -First 1 | Format-List InstalledOn

場合によっては、Windows が最近パッチを適用したかどうかを確認する唯一の手がかりとなることもあります。更新履歴が破損していたり​​、日付が一致していなかったりすると、多少の誤差が生じる可能性がありますが、通常は問題ありません。

また、PSWindowsUpdateという強力なPowerShellモジュールがあり、エラーを含む完全な更新履歴の確認や、更新プログラムのアンインストールも可能です。より高度な機能ですが、より集中管理された管理が必要な場合に便利です。興味があれば、 GitHub: Winhanceでツールをいくつかご紹介していますので、ぜひご覧ください。

今のところはちょっと変な感じですが、PowerShellを使うとアップデートを直接管理するのが本当に簡単になります。特にMicrosoftが古いツールを廃止し始めた今、PowerShellは本当に便利です。これ以上ないほどすっきりしています。