ある日、Windows Updateを「手動」に設定していたと思っていたWindows Serverの数台で「カスタム」になっていることに気が付きました。あらためて「手動」や他の設定に変更してみても「カスタム」のまま変わりません。一体どういうことでしょう。調査を開始します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Windows Server 2016」以降(注:「Windows Server 2012 R2」以前については今回の調査対象外とさせてください)のWindows Updateの設定は、デスクトップエクスペリエンスインストールかServer Coreインストールかどうかのインストールオプション、あるいは長期サービスチャネル(LTSC)か半期チャネル(SAC)かどうかに関係なく、インストール直後の既定は「ダウンロードのみ」になっています(画面1)。
インストール直後に「サーバーマネージャー」管理ツールで「ローカルサーバー」のプロパティ情報を見ると、「Windows Updateを使用して更新プログラムを自動的にインストールする」と表示されるかもしれませんが、「タスク」メニューから「最新の情報に更新」を選択すると情報がリフレッシュされ、「Windows Updateを使用して更新プログラムのダウンロードのみを行う」になるはずです。
このWindows Updateの初期設定は、レジストリの「HKEY_LOCAL_MACHINE\\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU」に直接書き込まれているポリシー設定によるものです。Windows Server 2016以降はインストールオプションに関係なく、「Sconfigサーバー構成ユーティリティー」で現在の設定の確認と、「自動」「ダウンロードのみ」「手動」への設定変更が可能です(画面2)。
Windows ServerのWindows Updateの設定は、Sconfigユーティリティー以外にも、Active Directoryドメインの「グループポリシー」または「ローカルグループポリシーエディター」(gpedit.msc)によるポリシー設定でカスタマイズすることができます。
Sconfigユーティリティーの「自動」または「ダウンロードのみ」の設定は、「自動更新を構成する」ポリシーが「有効」かつ「自動更新の構成:4 - 自動ダウンロードしインストール日時を指定」または「自動更新の構成:4 - 自動ダウンロードしインストール日時を指定」に相当します。
Sconfigユーティリティーの「手動」の設定は、「自動更新を構成する」ポリシーが「無効」に相当します(画面3)。Windows Update関連のポリシー設定は既定で全て「未構成」になっていますが、ドメインのグループポリシーまたはローカルポリシーでカスタマイズすることはもちろん可能です。「自動」「ダウンロードのみ」「無効」以外の設定は、Sconfigユーティリティーは「カスタム」として報告します。
ここまでは、Windows Serverを設定したことがある人や、Windows Serverの管理者の方ならご存じかと思います。
筆者は評価、テスト環境のWindows Serverについては、理由がない限りWindows Updateの設定を「手動」にしています。Windows Updateの挙動を確認するために、Sconfigユーティリティーやローカルポリシーで変更することはありますが、忘れずに「手動」に戻してきたつもりでした。
しかしある日、「手動」に設定していたはずのサーバの1台でSconfigユーティリティーを実行したところ、「Windows Updateの設定:カスタム」になっているのを目にしました。不思議なことに、設定を「手動」や「ダウンロードのみ」「自動」などに変更しようとしても、なぜか全て「カスタム」に設定されてしまうのです(画面4)。
何かポリシー設定を元に戻すのを忘れていたのかなと思い、「ローカルグループポリシーエディター」を開いてみると、Windows Update関連のポリシー設定は全て「未構成」の状態です(画面5)。このサーバはスタンドアロンの仮想マシンなので、ドメインのグループポリシーは全く関係ありません。
Sconfigユーティリティーのバッチファイル「%windir%\System32\Sconfig.cmd」を開いて確認すると、Sconfigユーティリティーは「%windir%\System32\ja-jp\Sconfig.vbs」を呼び出し、レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU」にある値を参照してWindows Updateの設定を取得していること、Windows Updateの設定の変更は「%windir%\System32\Scregedit.wsf」スクリプトを呼び出して行っていることが分かりました。
レジストリの値から取得した設定は、「自動」「ダウンロードのみ」「手動」であるかどうかを識別して出力し、それ以外は「カスタム」と出力します。つまり、関連するレジストリの値が存在しない場合も「カスタム」と出力するのです。
一方、Windows Updateの設定は、「%windir%\System32\Scregedit.wsf」スクリプトを「/AU 4」(自動)、「/AU 3」(ダウンロードのみ)、「/AU 1」(手動)パラメーター付きで実行することで変更できます。
そして、このスクリプトの問題(仕様)により、レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU」が存在しない場合は値を変更できず、Windows Updateの設定を保存することもできないのです(画面6)。
Sconfigユーティリティーで設定不能の状態になってしまっても、グループポリシーやローカルポリシーで管理するのであれば問題はないでしょう。Windows Update関連のポリシーを設定して、その後、未構成にした場合、レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU」が削除されてSconfigユーティリティーの問題が発生します。グループポリシーの取得失敗の影響で問題が発生することがあるかもしれません。
Windows Updateの設定をSconfigユーティリティーに取り戻したいのであれば、レジストリにWindows Updateの設定を直接書き込む必要があります。例えば、次のコマンドラインを実行すると、「手動」に設定することができます。設定後は、Sconfigユーティリティーで設定を再び変更できるようになります(画面7)。
REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d 1 /f
なお、2020年12月初めに公開された次期LTSC版Windows Serverのプレビュー(ビルド20240)や、一般提供が開始された「Azure Stack」の新しいハイパーコンバージド向けOSである「Azure Stack HCI」では、SconfigユーティリティーがPowerShell化(「Sconfig」モジュールの「Invoke-Sconfig」コマンドレッド)されており、Windows Updateの設定の変更は「Set-ItemProperty」コマンドレットによるレジストリ値の直接的な書き換えで行われていました。今回の内容は、Windows Serverの現行バージョン(Windows Server, version 20H2まで)を対象としたものであることに注意してください。
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2020-2021)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.