こんにちは、Japan Developer Support Core チームの松井です。今回は、Windows Update Agent (WUA) API を使用して更新プログラムの検索とダウンロード、インストールを行う方法を紹介します。
注意事項
「WUA API を使用して更新プログラムをインストールしたい」といったご要望を弊社へのお問い合わせで頂戴することがありますが、WUA API は Windows Update の機能を操作するための API であり、正しく使用するために Windows Update の動作に関する詳細な知識が必要となります。また、トラブルシュートのためにエラー処理やログ記録といったプログラムやスクリプトの実装の知識も求められます。IT 管理者の方が組織のデバイス管理のために WUA API の使用を検討されている場合は、プログラムやスクリプトの開発とテスト、保守が将来にわたって必要となることも考慮した上で、Windows Update のグループ ポリシーや Intune など既存の管理機能やソフトウェアでは本当にデバイス管理の要件を満たすことができないのか事前に十分な検討を行ってください。
使用する API について
Windows Update をアプリケーションやスクリプトから制御する方法として WUA API が提供されています。WUA API は COM ベースの API で、C/C++ や C# といったプログラミング言語の他、PowerShell や VBScript といったスクリプト言語からも利用することができます。
Windows Update で更新プログラムをインストールするまでの基本的な流れは、1. 検索、2. ダウンロード、3. インストール、4. 再起動(必要な場合)となります。WUA API では以下のインターフェイスを使用してこれらの処理を行います。
以下の例では、PowerShell から WUA API を使用して更新プログラムの検索、ダウンロード、インストールを行います。インストール後に再起動が求められている場合は再起動もあわせて行います。48 行目の Commit メソッドの呼び出しは機能更新プログラムのインストール時に必要となりますが、それ以外の場合に呼び出しても副作用はありません。
サンプル スクリプトは WUA API の使用例を紹介する目的となりますので、要件にあわせた実装の変更やエラー処理の追加、動作確認などをご自身で必ず行ってください。特に、タスクスケジューラーなどからスクリプトを非対話的に実行する場合は、処理の経過や失敗した際のエラーコードや例外メッセージが事後に確認できるように、ログの出力やエラー処理を実装してください。
なお、IUpdateSession::ClientApplicationID プロパティを設定しておくことで C:\Windows\SoftwareDistribution\ReportingEvents.log や C:\Windows\Logs\WindowsUpdate フォルダー配下の WindowsUpdate*.etl のログにアプリケーション名が記録されます。WUA API を利用する Windows の機能や他のソフトウェアの処理と区別するために、スクリプト毎に適切なアプリケーション名を設定しておくことをお勧めします。省略した場合は <<PROCESS>>: powershell.exe のようにログに記録されます。
# Create a WUA session $updateSession = New-Object-ComObject Microsoft.Update.Session $updateSession.ClientApplicationID = "WUA API Sample - Search, Download, Install and Restart if required"
Write-Host"Searching for updates..." $updateSearcher = $updateSession.CreateUpdateSearcher() $searchResult = $updateSearcher.Search("IsInstalled=0 and Type='Software'") if ($searchResult.Updates.Count -eq0) { Write-Host"No updates available for installation." return }
# Collect updates to download $updatesToDownload = New-Object-ComObject Microsoft.Update.UpdateColl foreach ($updatein$searchResult.Updates) { Write-Host"To be downloaded: $($update.Title)" $updatesToDownload.Add($update) | Out-Null }
Write-Host"Installation result code: $($installationResult.ResultCode)"
# Check if a reboot is required if ($installationResult.RebootRequired) { $installer.Commit() Write-Host"A reboot is required. Restarting the system..." Restart-Computer-Force } else { Write-Host"No reboot is required." } } else { Write-Host"No updates available for installation." }
WUA API でエラーになる場合の切り分けについて
WUA API を使用したプログラムやスクリプトでエラーが発生した場合、まずは Windows の標準の Windows Update から更新プログラムをインストールした場合も発生するかどうか、msu ファイルを手動でインストールしても発生するかどうかを確認してください。もし Windows Update の標準の機能や手動でのインストールでも同様のエラーが発生する場合は、WUA API やスクリプトの問題ではなく、ネットワーク接続など環境に起因する問題や、更新プログラム自体の問題である可能性があります。
WUA API を使用した場合の Windows Update のログについて
WUA API を使用した場合も、Windows の標準の Windows Update と同様にログが記録されます。まずは C:\Windows\SoftwareDistribution\ReportingEvents.log を確認してください。このログには WUA API の処理に関する概要情報が記録されており、エラーの原因を特定する手助けになります。以下は、ReportingEvents.log の一部の例です。
1 2 3 4 5 6
{57430D21-2FC0-4058-A757-016EC30AE4BE} 2025-08-20 14:03:30:904+0900 1 147 [AGENT_DETECTION_FINISHED] 101 {9482F4B4-E343-43B6-B170-9A65BC822C77} 0 0 WUA API Sample - Search, Download, Install and Restart if required Success Software Synchronization Windows Update Client successfully detected 3 updates. gUGJXBwb0kW34Qrx.1.0.0.3.0 {B6904BFC-2A35-4127-BC9A-756E4BDC6975} 2025-08-20 14:03:32:314+0900 1 147 [AGENT_DETECTION_FINISHED] 101 {8B24B027-1DEE-BABB-9A95-3517DFB9C552} 0 0 WUA API Sample - Search, Download, Install and Restart if required Success Software Synchronization Windows Update Client successfully detected 2 updates. gUGJXBwb0kW34Qrx.1.1.0.3.0 {C032168B-1457-4CE6-81F3-6E3F3712CC4E} 2025-08-20 14:03:32:798+0900 1 167 [AGENT_DOWNLOAD_STARTED] 101 {EA6E2510-4BE0-4FF2-B24E-42B5F59F6D6B} 1 0 WUA API Sample - Search, Download, Install and Restart if required Success Content Download Download started. gUGJXBwb0kW34Qrx.2.0.0.2.0 {E17F1616-1DD3-45CB-8069-E218DD420CF3} 2025-08-20 14:03:34:091+0900 1 162 [AGENT_DOWNLOAD_SUCCEEDED] 101 {A32CA1D0-DDD4-486B-B708-D941DB4F1051} 204 0 WUA API Sample - Search, Download, Install and Restart if required Success Content Download Download succeeded. gUGJXBwb0kW34Qrx.2.1.0.4.0 {B975278D-B3F7-40D0-BB88-DE39CFFB353D} 2025-08-20 14:07:49:274+0900 1 181 [AGENT_INSTALLING_STARTED] 101 {EA6E2510-4BE0-4FF2-B24E-42B5F59F6D6B} 1 0 WUA API Sample - Search, Download, Install and Restart if required Success Content Install Installation Started: Windows has started installing the following update: 2025-07 Cumulative Update for .NET Framework 3.5 and 4.8.1 for Windows 11, version 24H2 for x64 (KB5056579) gUGJXBwb0kW34Qrx.3.0.0.1.0 {4731711C-843A-4BB5-BDBC-EFD23F0CCAC9} 2025-08-20 14:08:03:116+0900 1 182 [AGENT_INSTALLING_FAILED] 101 {EA6E2510-4BE0-4FF2-B24E-42B5F59F6D6B} 1 80242016 WUA API Sample - Search, Download, Install and Restart if required Failure Content Install Installation Failure: Windows failed to install the following update with error 0x80242016: 2025-07 Cumulative Update for .NET Framework 3.5 and 4.8.1 for Windows 11, version 24H2 for x64 (KB5056579). gUGJXBwb0kW34Qrx.3.0.0.3.0.0
エラーが発生している更新プログラムについてさらに詳細な情報を確認する場合は、PowerShell から Get-WindowsUpdateLog コマンドレットを実行して C:\Windows\Logs\WindowsUpdate フォルダー配下の WindowsUpdate*.etl ファイルをテキスト形式に変換して内容を確認してください。変換後のログファイルには、WUA API の処理に関する詳細な情報が記録されます。以下は、変換後のログファイルの一部の例です。
1 2 3 4 5 6 7 8 9 10
2025/08/20 14:08:48.3466909 10632 4300 ComApi * START * Federated Install ClientId = WUA API Sample - Search, Download, Install and Restart if required (cV: gUGJXBwb0kW34Qrx.3.0) 2025/08/20 14:08:48.3468123 10632 4300 ComApi XxxJobImpl: _EndXxx invoked (cV = gUGJXBwb0kW34Qrx.3.0) 2025/08/20 14:08:48.3470566 10632 12132 ComApi * START * Install ClientId = WUA API Sample - Search, Download, Install and Restart if required, Flags: 0X20 (cV: gUGJXBwb0kW34Qrx.3.0.0) 2025/08/20 14:08:48.3470760 10632 12132 ComApi Allow source prompts: Yes; Forced: No; Force quiet: No; Attempt close apps if necessary: No 2025/08/20 14:08:48.3470944 10632 12132 ComApi Updates in request: 2 2025/08/20 14:08:48.3470995 10632 12132 ComApi ServiceID = {8B24B027-1DEE-BABB-9A95-3517DFB9C552} Third party service 2025/08/20 14:08:48.3484545 9044 9092 Misc UUS: Session=wu.core.updatedeploy, Module=UpdateDeploy.dll, Version=1308.2408.1052.0, Path=C:\WINDOWS\uus\AMD64\UpdateDeploy.dll 2025/08/20 14:08:48.3498546 9044 9092 Misc Load undocked module: UusId:wu.core.updatedeploy|hr:0x0|ModuleVer:1308.2408.1052.0|LoadProps:3|Path:C:\WINDOWS\uus\AMD64\UpdateDeploy.dll 2025/08/20 14:08:49.7866851 8216 8096 Deployment *FAILED* [8024B104] UpdateDeploy.dll, C:\__w\1\s\src\Client\Engine\handler\OSDeployment\Helper\OSDeploymentHelper.cpp @853 2025/08/20 14:08:49.7867025 8216 8096 Handler *FAILED* [8024B104] Merge failed for update ID: EA6E2510-4BE0-4FF2-B24E-42B5F59F6D6B.1