検索
連載

Windows 10で面倒になった「Windows Update」のコントロールを取り戻す方法はあるのか?山市良のうぃんどうず日記(197)

Windows 10になってWindows Updateはコントロールが難しくなりました。Windows Updateのコントロールを取り戻す方法の一つに「Windows Update Agent API(WUA API)」を利用したスクリプト化があります。しかし、Windows 10で導入された新たな更新サービスの影響なのか、Windows 8.1以前と同じようにはいかないことも……。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「山市良のうぃんどうず日記」のインデックス

山市良のうぃんどうず日記

「WUA API」でWindows Updateのコントロールを取り戻せ!

 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)。

画面1
画面1 WUA APIのサンプルスクリプトをカスタマイズした筆者の更新スクリプト

 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の「Sconfig」は推奨の更新を検索できない?

 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)。

画面2
画面2 「A」を入力すると、2020年11月のBリリースの品質更新プログラムをインストール対象として検出
画面3
画面3 「R」を入力すると、「悪意のあるソフトウェアの削除ツール」しか検索されない

 公式ドキュメントのサンプルスクリプトは検索条件として「"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」では推奨される更新も、重要な更新も検索対象から除外されてしまうのです。

画面4
画面4 Sconfigユーティリティーが利用しているWUA APIの「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月のこのときが初めてでした。

「AutoSelectOnWebSites=1」は当てにならないし、使えない

 オプションの更新プログラムのインストールを制御したいという目的で2020年10月後半からいろいろと試していたのですが、「AutoSelectOnWebSites=1」を含めて気が付いたことを幾つか紹介します。

 1つ目は、WUA APIでWindowsの「累積更新プログラムのプレビュー」(Cリリース)を検索してインストールすることはできないということです。2020年10月のCリリースのタイミングでWindows Server 2019をSconfigユーティリティーで更新する場合、「A」オプションを使用して検索されるのは.NET Frameworkの「累積更新プログラムのプレビュー」のみです。Windowsの「累積更新プログラムのプレビュー」はインストール対象として検索されませんでした。

 一方、「設定」アプリの「Windows Update」から「更新プログラムの確認」をクリックすると、両方の「累積更新プログラムのプレビュー」のダウンロードとインストールが始まります(画面5)。

画面5
画面5 Sconfigユーティリティーで推奨される更新プログラムを検索しても、Windowsの「累積更新プログラムのプレビュー」を検出しない(この画面ではKB4580390、日本語の名称は“のプレビュー”が抜けている)

 Windows 10 バージョン1903以降は、「更新プログラムの確認」をクリックしてもWindowsの更新プグラムのプレビューはダウンロードもインストールもされないように改良されました。WUA APIで全ての更新プログラムを検索するだけの簡単なスクリプトを作成し、Windows 10 バージョン1909で2020年10月のCリリースのときに検索された各更新プログラムの幾つかの属性を確認してみました。

 やはり、WUA APIはWindowsの「累積更新プログラムのプレビュー」をインストール対象として拾いませんでした。そして、.NET Frameworkの「累積更新プログラムのプレビュー」の「AutoSelectOnWebSites」には「False」が、「Microsoft Defender」関連の更新プログラムは「True」がセットされていました(画面6)。

画面6
画面6 Windows 10 バージョン1909の2020年10月のCリリースをWUA APIで検索した結果

 次の画面7は、Windows Server 2019で2020年11月のBリリースのときに同スクリプトを実行した結果です。「AutoSelection」や「AutoDownload」という興味深い属性がありますが、WindowsのBリリースと.NET FrameworkのBリリースで異なる値がセットされているため、この属性値を使って何か制御できそうにはありません。

画面7
画面7 Windows Server 2019の11月のBリリースをWUA APIで検索した結果

 「Office 2013」がインストールされているWindows 8.1でも、2020年11月のBリリースのときに同じスクリプトを試してみました(画面8)。Windows 8.1の場合、1つの例外を除いて、自動選択された更新プログラムの「AutoSelectOnWebSites」は「True」にセットされていました。例外は、.NET Frameworkの更新プログラムです。

画面8
画面8 Windows 8.1の2020年11月のBリリースをWUA APIで検索した結果。「AutoSelectOnWebSites」の値は、.NET Frameworkの更新プログラムを除いて、Windows Updateの選択状況と一致する

 このように、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)。

画面9
画面9 Windows 10でWUfBのポリシー設定を行うと、「累積更新プログラムのプレビュー」を検出しなくなる

 WUA APIは、Windows Updateで自動配布されるWindows 10の機能更新プログラムについては、累積更新プログラムと同じように扱うようです。機能更新プログラムの案内が表示されている段階では検出しませんが、WUfBのポリシー設定を利用して自動更新を試みたところ、WUA APIが利用可能な更新プログラムとして検出しました(画面10)。Windows Updateをスクリプトで代替する場合、Windows 10については機能更新プログラムがインストールされる可能性があることにもご注意ください。

画面10
画面10 WUfBのターゲットバージョン指定ポリシーで取得した機能更新プログラムは、WUA APIで検出された

 最後に、自動化スクリプトの作成は断念しましたが、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.

ページトップに戻る