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。
评论
暂无评论。来做第一个吧。