特定の更新プログラムの検索、ダウンロード、インストール
このトピックのスクリプト サンプルでは、Windows Update エージェント (WUA) を使用し、特定の更新プログラムをスキャン、ダウンロード、インストールする方法を示します。 更新プログラムは、タイトルで指定できます。
このサンプルは特定のソフトウェア更新プログラムを検索し、更新プログラムをダウンロードしてインストールします。 たとえば、ユーザーはこのメソッドを使用し、クリティカルなセキュリティ アップデートがコンピューターにインストールされているかどうかを特定できます。 更新プログラムがインストールされていない場合、ユーザーは更新プログラムがダウンロードされてインストールされていることを確認できます。 ユーザーは、インストールの状態に関する通知を受け取れるようにすることができます。
サンプル更新プログラムは、IUpdate のタイトル プロパティの更新タイトルによって識別されます。 このサンプルで推奨される更新プログラムのタイトルは、"Update for Windows Rights Management Client 1.0" です。
Note
特定のアプリケーションに適用されるすべての更新プログラムを検索、ダウンロード、インストールする方法の詳細については、「更新プログラムの検索、ダウンロード、インストール」を参照してください。
このサンプルを実行する前に、次の点に注意してください。
- WUA をコンピューターにインストールする必要があります。 インストールされている WUA のバージョンを特定する方法の詳細については、「WUA の現在のバージョンを特定する」を参照してください。
- このサンプルは、独自のユーザー インターフェイスを提供していません。 更新プログラムの再起動が必要な場合、WUA はユーザーにコンピューターを再起動するように求めます。
- このサンプルは、WUA からのみ更新プログラムをダウンロードできます。 ソフトウェア更新プログラム サービス (SUS) 1.0 サーバーから更新プログラムをダウンロードすることはできません。
- このサンプルを実行するには、Windows スクリプト ホスト (WSH) が必要です。 WSH の詳細については、「プラットフォーム ソフトウェア開発キット (SDK) 」の「WSH セクション」を参照してください。 サンプルが WUA_SpecificUpdate.vbs という名前のファイルにコピーされた場合、コマンド プロンプト ウィンドウを開いて「cscript WUA_SpecificUpdate.vbs」のコマンドを入力して実行できます。
Note
スキャンを実行すると、メモリ使用量が通常よりも高くなる場合があります。 スキャン プロセスに十分なメモリ リソースを割り当てるために、システムに必要な調整を行うことをお勧めします。 これには、追加のプロセッサの構成やページファイルの変更が含まれる場合があります。 十分なメモリ割り当てを確保することは、スキャンを効率的かつ効果的に完了するのに役立ちます。
例
重要
このスクリプトは、Windows Update エージェント API の使用法を示し、開発者がこれらの API を使って問題を解決する方法の例を提供することを意図しています。 このスクリプトは運用環境コードとして意図されてません。また、スクリプト自体は Microsoft によってサポートされていません (ただし、基となる Windows Update エージェント API はサポートされている)。
Set updateSession = CreateObject("Microsoft.Update.Session")
updateSession.ClientApplicationID = "Sample Script"
'Get update title to search for
WScript.Echo "Enter the title of the update: " & _
"(for example, Update for Windows Rights Management client 1.0)"
updateTitle = WScript.StdIn.Readline
WScript.Echo vbCRLF & "Searching for: " & updateTitle & "..."
Set updateSearcher = updateSession.CreateupdateSearcher()
'Search for all software updates, already installed and not installed
Set searchResult = _
updateSearcher.Search("Type='Software'")
Set updateToInstall = CreateObject("Microsoft.Update.UpdateColl")
updateIsApplicable = False
'Cycle through search results to look for the update title
For i = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(i)
If UCase(update.Title) = UCase(updateTitle) Then
'Update in list of applicable updates
'Determine if it is already installed or not
If update.IsInstalled = False Then
WScript.Echo vbCRLF & _
"Result: Update applicable, not installed."
updateIsApplicable = True
updateToInstall.Add(update)
Else
'Update is installed so notify user and quit
WScript.Echo vbCRLF & _
"Result: Update applicable, already installed."
updateIsApplicable = True
WScript.Quit
End If
End If
Next
If updateIsApplicable = False Then
WScript.Echo "Result: Update is not applicable to this machine."
WScript.Quit
End If
WScript.Echo vbCRLF & "Would you like to install now? (Y/N)"
stdInput = WScript.StdIn.Readline
If (strInput = "N" or strInput = "n") Then
WScript.Quit
ElseIf (stdInput = "Y" OR stdInput = "y") Then
'Download update
Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updateToInstall
WScript.Echo vbCRLF & "Downloading..."
Set downloadResult = downloader.Download()
WScript.Echo "Download Result: " & downloadResult.ResultCode
'Install Update
Set installer = updateSession.CreateUpdateInstaller()
WScript.Echo vbCRLF & "Installing..."
installer.Updates = updateToInstall
Set installationResult = installer.Install()
'Output the result of the installation
WScript.Echo "Installation Result: " & _
installationResult.ResultCode
WScript.Echo "Reboot Required: " & _
installationResult.RebootRequired
End If