Windows Update Agent API を使用して更新プログラムを検索、ダウンロード、インストールする

Last Update: feedback 共有

こんにちは、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 のようにログに記録されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# Please run with administrator privileges

# 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 -eq 0) {
Write-Host "No updates available for installation."
return
}

# Collect updates to download
$updatesToDownload = New-Object -ComObject Microsoft.Update.UpdateColl
foreach ($update in $searchResult.Updates) {
Write-Host "To be downloaded: $($update.Title)"
$updatesToDownload.Add($update) | Out-Null
}

# Download updates
Write-Host "Downloading updates..."
$downloader = $updateSession.CreateUpdateDownloader()
$downloader.Updates = $updatesToDownload
$downloadResult = $downloader.Download()

# Collect updates to install
$updatesToInstall = New-Object -ComObject Microsoft.Update.UpdateColl
foreach ($update in $searchResult.Updates) {
if ($update.IsDownloaded) {
Write-Host "To be installed: $($update.Title)"
$updatesToInstall.Add($update) | Out-Null
}
}

# Install updates
if ($updatesToInstall.Count -gt 0) {
Write-Host "Installing updates..."
$installer = $updateSession.CreateUpdateInstaller()
$installer.Updates = $updatesToInstall
$installationResult = $installer.Install()

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

Windwos Update のログについての詳細な説明はドキュメントをご確認ください。

参考情報

VBScript となりますが、様々なシナリオをカバーしたサンプルスクリプトもこちらのページで公開されていますので、そちらもあわせて参考にしていただければと思います。PowerShell など他の言語から利用したい場合、Copilot を使用していただければ簡単に変換できますので是非ご活用ください。

Copilot にスクリプトを変換させる


本ブログの内容は弊社の公式見解として保証されるものではなく、開発・運用時の参考情報としてご活用いただくことを目的としています。もし公式な見解が必要な場合は、弊社ドキュメント (https://learn.microsoft.comhttps://support.microsoft.com) をご参照いただくか、もしくは私共サポートまでお問い合わせください。