ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Windowsサーバー

Windows Server の Windows Update 管理:自動再起動の停止と PowerShell での更新

6 ステップ 9 分で読めます 3 回閲覧 0
目次

本番環境の Windows サーバーで最も避けたいのが、自動更新による深夜の突然の再起動です。この記事では Windows Server 2016/2019/2022 の Windows Update 管理として、sconfig・グループポリシー・レジストリによる自動更新と自動再起動の制御、アクティブ時間の設定、PowerShell の PSWindowsUpdate モジュールによる更新のインストール、更新履歴の確認、メンテナンス時間帯での再起動予約までを解説します。

ステップ1:sconfig で Windows Update のモードを設定する

管理者として PowerShell またはコマンドプロンプトを開き sconfig を実行します。「Windows Update 設定」(通常は 5 番)を選び、自動・ダウンロードのみ・手動から選択します。本番サーバーでは「ダウンロードのみ」がおすすめで、インストールと再起動のタイミングを自分で決められます。

sconfig

ステップ2:グループポリシーまたはレジストリで自動再起動を止める

gpedit.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
「ログオンユーザーがいる場合は再起動しない」はセッションが存在するときだけ有効です。RDP をサインアウトせずに閉じていれば保護されますが、全員がサインアウトしていると再起動する可能性があるため、AUOptions=3 と併用します。

ステップ3:アクティブ時間を設定してピーク時の再起動を防ぐ

アクティブ時間中は更新による自動再起動が行われません。「設定 → 更新とセキュリティ → 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,ActiveHoursEnd

ステップ4:PowerShell の PSWindowsUpdate で更新をインストールする

PSWindowsUpdate はコマンドラインで更新の一覧表示・インストール・非表示ができる定番モジュールで、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

ステップ5:Windows Update の更新履歴と再起動待ちを確認する

「なぜ再起動したのか」を調べたいときや、特定の 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"

ステップ6:メンテナンス時間帯に再起動を予約する

更新を入れたら、アクセスの少ない時間帯に再起動します。以下は翌日 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 に接続できない場合は更新の構成中の可能性があるため、10〜20 分ほど待ってからサポートへご連絡ください。

よくある質問

Windows Update を完全に無効化できますか?

技術的には可能ですが、パッチを当てないと RDP や SMB の既知の脆弱性が残ります。「ダウンロードのみ/通知」にして、毎月決まった日に手動で適用する運用をおすすめします。

sconfig のメニュー番号が記事と違います。

バージョンや累積更新によってメニューが変わることがあります。画面上の「Windows Update 設定」「更新プログラムのインストール」の表記に従ってください。

更新が失敗する、ダウンロードが進まない場合は?

外部通信と DNS を確認したうえで、sfc /scannow と DISM /Online /Cleanup-Image /RestoreHealth でシステムを修復し、再度インストールしてください。

上記の手順で解決しない場合は、サポートチケットから IMIDC の 24 時間 365 日対応テクニカルサポートへお問い合わせください。サーバー IP、OS のバージョン、実行したコマンド、エラー画面のスクリーンショットを添えていただくと、より早く原因を特定できます。

この回答はお役に立ちましたか?

関連チュートリアル