Windows 10になってWindows Updateはコントロールが難しくなりました。Windows Updateのコントロールを取り戻す方法の一つに「Windows Update Agent API(WUA API)」を利用したスクリプト化があります。しかし、Windows 10で導入された新たな更新サービスの影響なのか、Windows 8.1以前と同じようにはいかないことも……。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
2020年最後となる本連載のシメは、2020年(も)いろいろと問題を起こしてきた「Windows Update」についてです。以下の回で紹介したように、「Windows 10 バージョン2004(May 2020 Update)」や「Windows 10 バージョン20H2(October 2020 Update)」は、Windows Updateが従来とは異なる挙動を示すようになり、戸惑うユーザーは多かったと思います。
手動更新や更新プログラムのインストールの可否を選択可能だった「Windows 8.1」とは異なり、「Windows 10」になってWindows Updateをコントロールするすべが大きく制限されてしまいました。これは「Windows Server 2016」以降も同様です。
Windows 10のWindows Updateには、機能更新プログラムというWindows 10のバージョンアップグレードも加わり、年に2回、更新のために長い時間を取られることになります。場合によっては、機能更新プログラムの問題の影響を受け、ロールバックやバックアップからの復元のためにさらに時間を取られることになります。
Windows Updateのコントロールを自分の手に取り戻す方法の一つに、「Windows Update Agent API(WUA API)」を利用したスクリプトによる更新プログラムのインストールがあります。以下のMicrosoftの公式ドキュメントに、少なくとも「Windows XP」および「Windows Server 2003」以降、最新バージョンのWindows/Windows Serverまで利用できるサンプルスクリプトがあります。
このサンプルスクリプトは利用可能な更新プログラムを検出すると「Y/N」で答える必要がありますが、少しカスタマイズすれば完全に自動化することができます。筆者の個人ブログに、カスタマイズしたものを掲載しているので参考にしてください(画面1)。
Windows 10 バージョン1709からバージョン1909までは、PowerShell用の「WindowsUpdateProvider」モジュールが提供する便利なコマンドレット(「Start-WUScan」「Install-WUUpdates」「Get-WUIsPendingRemoot」など)が利用できました。しかし、本連載第183回で指摘したように、残念ながらこの機能はWindows 10 バージョン2004で廃止されました。
そこで筆者が10年以上前に書いたスクリプトを、もう一度見直すことにしました。真の目的は「Cリリース」とも呼ばれる「オプションの更新プログラム」(2020年7月からは「累積更新プログラムのプレビュー」と呼びます)を拾わない方法を探ることでしたが、その目的を果たすことはできず、いつの間にか仕様が変わっていたことを知ることになりました。
なお、2020年7月以降、Windows 10 バージョン1803以前およびWindows Server 2006以前に対して「累積更新プログラムのプレビュー」が提供されることはなくなりました。今回の検証はWindows 10 バージョン1809以降およびWindows Server 2019以降を対象としたものになります。Windows 10 バージョン1803以前およびWindows Server 2006以前は、もう「累積更新プログラムのプレビュー」を心配する必要はありません。
Windows Serverは、Server Coreインストール向けの「Sconfig」ユーティリティーが用意されており(デスクトップエクスペリエンスでも利用可能)、「6)更新プログラムのダウンロードとインストール」メニューはWUA APIのサンプルスクリプトとほとんど同じコードで書かれた「C:\windows\system32\ja-jp\WUA_SearchDownloadInstall.vbs」を実行します。
「A」を入力すると全ての更新プログラムを検索し、「R」を入力すると推奨される更新プログラムのみを検索するはずなのですが、2020年11月の米国時間第2火曜日(Bリリース)に何となく「R」を入力してみたところ、利用可能であるはずの重要な品質更新プログラムが検索結果に出てこないことに気が付きました(画面2、画面3)。
公式ドキュメントのサンプルスクリプトは検索条件として「"IsInstalled=0 and Type='Software' and IsHidden=0"」を使用しているのですが、「WUA_SearchDownloadInstall.vbs」の「A」は「"IsInstalled=0 and Type='Software'"」を使用し、「R」は「"IsInstalled=0 and Type='Software' and AutoSelectOnWebSites=1"」(この「1」はTrueのこと)を使用しています(画面4)。つまり、「AutoSelectOnWebSites=1」では推奨される更新も、重要な更新も検索対象から除外されてしまうのです。
筆者も「WUA_SearchDownloadInstall.vbs」に倣ってスクリプトを作成していました。そして、少なくともWindows 8.1やWindows Server 2012 R2までは期待通りに動作していたと記憶しています。しかし、Windows 10になって、.NET Frameworkの更新プログラムがWindowsの更新プログラムから分離されたころから、.NET Frameworkの更新プログラムをうまく制御(選択または非選択)できないことがあり、その後、「AutoSelectOnWebSites=1」を削除してしまった記憶があります。「AutoSelectOnWebSites=1」が全く期待通りに機能しないことを知ったのは、2020年11月のこのときが初めてでした。
オプションの更新プログラムのインストールを制御したいという目的で2020年10月後半からいろいろと試していたのですが、「AutoSelectOnWebSites=1」を含めて気が付いたことを幾つか紹介します。
1つ目は、WUA APIでWindowsの「累積更新プログラムのプレビュー」(Cリリース)を検索してインストールすることはできないということです。2020年10月のCリリースのタイミングでWindows Server 2019をSconfigユーティリティーで更新する場合、「A」オプションを使用して検索されるのは.NET Frameworkの「累積更新プログラムのプレビュー」のみです。Windowsの「累積更新プログラムのプレビュー」はインストール対象として検索されませんでした。
一方、「設定」アプリの「Windows Update」から「更新プログラムの確認」をクリックすると、両方の「累積更新プログラムのプレビュー」のダウンロードとインストールが始まります(画面5)。
Windows 10 バージョン1903以降は、「更新プログラムの確認」をクリックしてもWindowsの更新プグラムのプレビューはダウンロードもインストールもされないように改良されました。WUA APIで全ての更新プログラムを検索するだけの簡単なスクリプトを作成し、Windows 10 バージョン1909で2020年10月のCリリースのときに検索された各更新プログラムの幾つかの属性を確認してみました。
やはり、WUA APIはWindowsの「累積更新プログラムのプレビュー」をインストール対象として拾いませんでした。そして、.NET Frameworkの「累積更新プログラムのプレビュー」の「AutoSelectOnWebSites」には「False」が、「Microsoft Defender」関連の更新プログラムは「True」がセットされていました(画面6)。
次の画面7は、Windows Server 2019で2020年11月のBリリースのときに同スクリプトを実行した結果です。「AutoSelection」や「AutoDownload」という興味深い属性がありますが、WindowsのBリリースと.NET FrameworkのBリリースで異なる値がセットされているため、この属性値を使って何か制御できそうにはありません。
「Office 2013」がインストールされているWindows 8.1でも、2020年11月のBリリースのときに同じスクリプトを試してみました(画面8)。Windows 8.1の場合、1つの例外を除いて、自動選択された更新プログラムの「AutoSelectOnWebSites」は「True」にセットされていました。例外は、.NET Frameworkの更新プログラムです。
このように、Windowsのバージョンに関係なく、現在は「AutoSelectOnWebSites」の値はインストールすべき重要な更新プログラムであることを判断する条件として使えないことが分かりました。また、Windowsの「累積更新プログラムのプレビュー」はWUA APIで扱えないことも分かりました。
「設定」アプリを持たないWindows ServerのServer Core環境は、「Microsoft Updateカタログサイト」から自らダウンロードしてインストールする以外に、Windowsの「累積更新プログラムのプレビュー」をインストールする方法がないということでもあります。
Windows Updateの中心的なサービスは、「Windows Update(wuauserv)」ですが、Windows 10およびWindows Server 2016ではさらに「Update Orchestrator Service(UsoSvc)」というサービスが追加され、更新プログラムのダウンロードとインストールに関与しています。
Windows 10のWUA APIで扱えない更新プログラム(Windowsの「累積更新プログラムのプレビュー」の他に、オプションのドライバの更新プログラムも扱えません)があるのは、この新しいサービスが関係しているのではないかと筆者は想像しています。
なお、このサービスの表示名、Windows 10の最近のバージョンの日本語版では「Orchestrator Serviceの更新」となっていますが、この翻訳は不適切です。Windows 10 バージョン1809以前は日本語版でも「Update Orchestrator Service」でした。ちなみに、「%Windir%\System32\UsoSvc.dll」のファイルの説明は「Update Session Orchestrator Service」であり、この略称が「UsoSvc」です。
WUA API単体で「累積更新プログラムのプレビュー」をインストールさせない自動化スクリプトの作成は断念します。Windowsの「累積更新プログラムのプレビュー」が検出されることはありませんが、タイミングによってはどうしても.NET Frameworkの「累積更新プログラムのプレビュー」が検出されてしまうからです。
全ての更新プログラムをインストールするスクリプトを、Bリリースからおおむね1週間以内、Cリリースが出る前までに実行することで、.NET Frameworkの「累積更新プログラムのプレビュー」がインストールされるのを回避できるでしょう。あるいは、「Windows Update for Business(WUfB)」のポリシー設定と組み合わせて(機能更新プログラムや品質更新プログラムの延期設定やターゲット機能更新プログラムのバージョン指定)と組み合わせることで、全ての「累積更新プログラムのプレビュー」が検出されるのを回避することができます(画面9)。
WUA APIは、Windows Updateで自動配布されるWindows 10の機能更新プログラムについては、累積更新プログラムと同じように扱うようです。機能更新プログラムの案内が表示されている段階では検出しませんが、WUfBのポリシー設定を利用して自動更新を試みたところ、WUA APIが利用可能な更新プログラムとして検出しました(画面10)。Windows Updateをスクリプトで代替する場合、Windows 10については機能更新プログラムがインストールされる可能性があることにもご注意ください。
最後に、自動化スクリプトの作成は断念しましたが、Windows UpdateをWUA APIで検索して、指定した更新プログラムのみを個別にインストールするスクリプトを作成してみたので、筆者の個人ブログに公開しておきます。Sconfigユーティリティーの「WUA_SearchDownloadInstall.vbs」を参考に、10年前の「WindowsUpdate.vbs」を改良したものです。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2019-2020)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.