Windows Server 2022 每月會收到一個大型累積更新,另外還有針對 .NET 和 Defender 的小更新。在我們的映像上,Windows 會替你下載,然後等你決定何時安裝,所以重新啟動永遠不會突然發生。反過來說:你不裝,就沒有人會裝。本文介紹三種安裝方式、重新啟動時會發生什麼,以及如何收回更新留下的磁碟空間。為了取得這些數字,我們把一台 Windows Server 2022 從 2022 年 3 月的初始版本,一步步更新到 2026 年 10 月的更新。
1. 查看目前的版本
開啟 PowerShell 並執行:
$v = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
"{0}.{1}" -f $v.CurrentBuild, $v.UBR
第二個數字是更新層級。我們的伺服器從 2022 年 3 月的 20348.587 起步,全部更新後變成 20348.5761,也就是 2026 年 10 月的累積更新。現在向我們訂購的 Windows 伺服器也從這個版本開始:2026 年 10 月 25 日,我們正是依照這些步驟更新了映像。Get-HotFix 可以列出已安裝的內容:
Get-HotFix | Sort-Object InstalledOn | Select-Object -Last 5
2. 安裝更新
選你順手的方式。三種方式用的都是同一個 Windows Update。
設定。 Start → Settings → Update & Security → Windows Update → Check for updates,然後點 Install now。如果頁面提示部分設定由你的組織管理,那是我們的「僅下載」原則,並不會妨礙你安裝。
sconfig。 在 PowerShell 輸入 sconfig。選項 6) Install updates 會問要搜尋什麼:選 All quality updates,然後安裝。選項 5) Update setting 在我們的映像上顯示 Download only。也可以在這裡改成 Automatic,之後 Windows 會依自己的排程安裝並重新啟動。
同一個選單還有 Feature updates。除非你有較新 Windows Server 的授權,否則別碰它。sconfig 會警告:功能更新需要新的產品金鑰,並會停用你目前的版本。
PowerShell。 若要寫指令碼或排程工作,Windows Update 本身的 API 不需額外模組就能完成所有工作。我們執行的是這段:
$session = New-Object -ComObject Microsoft.Update.Session
$result = $session.CreateUpdateSearcher().Search("IsInstalled=0 and IsHidden=0 and Type='Software'")
$updates = New-Object -ComObject Microsoft.Update.UpdateColl
foreach ($u in $result.Updates) { $u.AcceptEula(); [void]$updates.Add($u); $u.Title }
if ($updates.Count -gt 0) {
$d = $session.CreateUpdateDownloader(); $d.Updates = $updates; [void]$d.Download()
$i = $session.CreateUpdateInstaller(); $i.Updates = $updates
$r = $i.Install(); "Result: $($r.ResultCode) Restart needed: $($r.RebootRequired)"
} else { "Nothing to install" }
請在系統管理員身分的 PowerShell 中執行。結果代碼 2 代表成功;在已是最新狀態的伺服器上,它只會顯示 Nothing to install。
3. 重新啟動,並讓它完成
累積更新之後 Windows 需要重新啟動,有時會重新啟動兩次。我們看到的情況如下:
| 輪次 | 安裝了什麼 | 安裝時間 | 重新啟動 |
|---|---|---|---|
| 1 | 2026 年 9 月累積更新、.NET 更新、Defender、惡意軟體移除工具 | 22 分鐘 | 2 分 51 秒,約一分鐘後 Windows 又自行重新啟動一次 |
| 2 | 2026 年 10 月累積更新、Defender | 17 分鐘 | 約 2 分鐘,包含第二次自動重新啟動 |
| 3 | Defender 平台與定義 | 33 秒 | 無 |
| 4 | 已沒有剩餘更新 | — | — |
有兩件事要知道:
- 第二次重新啟動是正常的。 我們重新連上大約一分鐘後,Windows 為了完成更新又自行重新啟動一次。如果遠端桌面工作階段在你剛登入就中斷,多半就是這個原因。等一分鐘再連線。
- 畫面顯示「Working on updates」時不要強制關機。 從開始功能表或用
Restart-Computer重新啟動,然後耐心等待。在替換系統檔案時強制斷電,是更新後 Windows 無法開機的常見原因。
接著再檢查一次。落後好幾個月的伺服器會分層收到更新:我們是在 9 月的更新裝好之後,才看到 10 月的更新。一直重複,直到搜尋不到任何更新為止。
4. 收回磁碟空間
更新會讓磁碟用量變大。Windows 會保留每個被替換的系統檔案的舊版本,讓你之後可以解除安裝更新。在我們 50 GB 的伺服器上:
| 階段 | 已用空間 |
|---|---|
| 2022 年的原始映像 | 12.6 GB |
| 第一次累積更新期間 | 20.8 GB |
| 兩次累積更新之後 | 24.5 GB |
StartComponentCleanup 之後 | 17.3 GB |
/ResetBase 之後 | 15.7 GB |
| 清空更新下載快取之後 | 14.6 GB |
在系統管理員 PowerShell 中清理:
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
Dism.exe /Online /Cleanup-Image /StartComponentCleanup
第一個指令顯示可以收回多少空間。第二個會刪除已被新更新取代的元件舊版本。在我們的伺服器上它執行了 14 分鐘,釋放 6.9 GB。加上 /ResetBase 又在約一分半內釋放 1.6 GB,但之後已安裝的更新就無法再解除安裝。在正在使用的伺服器上我們會略過這一步,留到真的缺空間時再用。
Windows Update 下載的檔案也可以刪掉。我們這裡占了 1.1 GB:
Stop-Service wuauserv
Remove-Item C:\Windows\SoftwareDistribution\Download\* -Recurse -Force
Start-Service wuauserv
想知道除了更新之外還有什麼在占用磁碟,可以看磁碟空間那篇文章,裡面有 Windows 和 Linux 的數據。
5. 養成習慣
微軟會在每月第二個星期二發布安全性更新。每月執行一次 sconfig 第 6 項或上面的指令碼,重新啟動後再檢查一次。大型更新之前,把重要的東西複製到伺服器以外的地方。如果還沒做,記得強化 RDP:更新能補上 Windows 的漏洞,但擋不住別人猜中弱密碼。
選哪個方案
更新需要空間。我們測試用的是 Windows-Small(4 vCPU、4 GB、50 GB,每月 $11),兩次累積更新後仍有超過 25 GB 可用。如果你打算安裝大型軟體,Windows-Medium 每月 $19,提供 60 GB。四個 Windows 方案都在 Windows VPS 頁面,付款方式為 Base、Ethereum 或 Polygon 網路上的 USDT、USDC 或 ETH。
評論
目前還沒有評論。歡迎成為第一位。