Start typing to search across invoices, services, domains, tickets, and more...
本番環境の Windows サーバーで最も避けたいのが、自動更新による深夜の突然の再起動です。この記事では Windows Server 2016/2019/2022 の Windows Update 管理として、sconfig・グループポリシー・レジストリによる自動更新と自動再起動の制御、アクティブ時間の設定、PowerShell の PSWindowsUpdate モジュールによる更新のインストール、更新履歴の確認、メンテナンス時間帯での再起動予約までを解説します。
管理者として PowerShell またはコマンドプロンプトを開き sconfig を実行します。「Windows Update 設定」(通常は 5 番)を選び、自動・ダウンロードのみ・手動から選択します。本番サーバーでは「ダウンロードのみ」がおすすめで、インストールと再起動のタイミングを自分で決められます。
sconfiggpedit.msc で「コンピューターの構成 → 管理用テンプレート → Windows コンポーネント → Windows Update」を開き、「自動更新を構成する」を有効にして「3 - 自動ダウンロードしインストールを通知」を選択、さらに「スケジュールされた自動更新のインストールで、ログオンしているユーザーがいる場合には自動的に再起動しない」を有効にします。Server Core などでは同等のレジストリ値を設定します。
$au = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"
New-Item -Path $au -Force | Out-Null
# 3 = download automatically, notify before install
Set-ItemProperty -Path $au -Name NoAutoUpdate -Type DWord -Value 0
Set-ItemProperty -Path $au -Name AUOptions -Type DWord -Value 3
# Never auto-restart while a user is signed in
Set-ItemProperty -Path $au -Name NoAutoRebootWithLoggedOnUsers -Type DWord -Value 1
gpupdate /forceアクティブ時間中は更新による自動再起動が行われません。「設定 → 更新とセキュリティ → Windows Update → アクティブ時間の変更」から設定するか、以下のレジストリで指定します(最大 18 時間)。
$ux = "HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings"
# Active hours 08:00-23:00 (no automatic restart in this window)
Set-ItemProperty -Path $ux -Name ActiveHoursStart -Type DWord -Value 8
Set-ItemProperty -Path $ux -Name ActiveHoursEnd -Type DWord -Value 23
Get-ItemProperty -Path $ux | Select-Object ActiveHoursStart,ActiveHoursEndPSWindowsUpdate はコマンドラインで更新の一覧表示・インストール・非表示ができる定番モジュールで、Server Core や自動化に便利です。Windows Server 2016 では先に TLS 1.2 を有効にしないと PowerShell Gallery から取得できません。-IgnoreReboot を付ければ自動再起動しません。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Install-PackageProvider -Name NuGet -Force
Install-Module -Name PSWindowsUpdate -Force
Import-Module PSWindowsUpdate
# List available updates
Get-WindowsUpdate
# Install everything but do NOT reboot automatically
Install-WindowsUpdate -AcceptAll -IgnoreReboot
# Install a single KB only
Install-WindowsUpdate -KBArticleID KB5005112 -AcceptAll -IgnoreReboot「なぜ再起動したのか」を調べたいときや、特定の KB が入っているかを確かめたいときは、更新履歴と再起動待ちフラグを確認します。
Get-WUHistory -Last 20 | Format-Table Date,KB,Result,Title -AutoSize
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10
# Is a reboot pending?
Get-WURebootStatus
Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"更新を入れたら、アクセスの少ない時間帯に再起動します。以下は翌日 3:00 までの秒数を計算して再起動を予約するコマンドで、必要なら取り消せます。
# Reboot at 03:00 tonight (time in seconds from now)
$t = (Get-Date).Date.AddDays(1).AddHours(3)
shutdown /r /t ([int]($t - (Get-Date)).TotalSeconds) /c "Planned update reboot"
# Cancel a scheduled reboot
shutdown /a技術的には可能ですが、パッチを当てないと RDP や SMB の既知の脆弱性が残ります。「ダウンロードのみ/通知」にして、毎月決まった日に手動で適用する運用をおすすめします。
バージョンや累積更新によってメニューが変わることがあります。画面上の「Windows Update 設定」「更新プログラムのインストール」の表記に従ってください。
外部通信と DNS を確認したうえで、sfc /scannow と DISM /Online /Cleanup-Image /RestoreHealth でシステムを修復し、再度インストールしてください。
上記の手順で解決しない場合は、サポートチケットから IMIDC の 24 時間 365 日対応テクニカルサポートへお問い合わせください。サーバー IP、OS のバージョン、実行したコマンド、エラー画面のスクリーンショットを添えていただくと、より早く原因を特定できます。