生产环境windows服务器补丁更新必须滚动而非全量推送,因iis、sql server等服务对kb累积更新敏感,易致0x80070643失败或w3svc重启;须逐节点操作、禁用自动重启、nlb摘机延时验证、sql与iis专项处理。
生产环境 windows 服务器补丁更新必须采用滚动方式,不能批量或全量推送。核心原因是 iis、sql server、.net 运行时等关键服务对 kb 累积更新高度敏感,例如 kb5004237 类补丁易触发 0x80070643 安装失败,或导致 w3svc 意外重启,进而引发业务中断。
每次只操作一个节点,验证通过再推进
这是滚动更新的铁律。无论集群规模多大,都必须确保同一时间仅有一台服务器处于补丁安装和重启状态。其他节点持续承接流量,保障服务可用性。
- 使用 PowerShell 远程调用逐台执行:
Invoke-Command -ComputerName $server -ScriptBlock { Install-WindowsUpdate -AcceptAll -IgnoreReboot } - 安装后必须验证:用
Test-NetConnection $server -Port 443检查端口连通性,再用Get-Service w3svc | Where-Object Status -eq 'Running'确认核心服务已就绪 - 建议在脚本中加入等待逻辑(如
Start-Sleep -Seconds 60)和超时退出机制,避免卡死
禁用自动重启并手动控制重启时机
Windows 默认策略可能在无人值守时强制重启,这对生产服务器是高危行为。必须提前关闭所有自动重启开关。
- 运行命令禁用用户登录时自动重启:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name NoAutoRebootWithLoggedOnUsers -Value 1 - 同时设置
AUOptions = 3(自动下载并通知安装),确保补丁不静默触发重启 - 补丁安装完成后,由运维人员根据业务低峰期手动执行
Restart-Computer,并记录重启时间点
负载均衡器需提前摘机并确认退出延迟
若使用 NLB 或 Windows 自带负载均衡,Disable-NlbClusterNode 并非瞬时生效——节点从禁用到真正停止接收新连接存在 3–8 秒延迟,此期间仍可能打入请求。
- 补丁前先执行
Disable-NlbClusterNode -NodeName $server,然后等待至少 10 秒 - 再通过
Get-NlbClusterNode -NodeName $server确认状态为 Draining 或 Unavailable - 建议搭配应用层健康检查(如 HTTP 200 探针)双重确认节点已无流量
SQL Server 和 IIS 需专项处理
SQL Server 实例所在服务器不能依赖通用补丁流程。其补丁需由 SQL Server 安装中心预载 setup.exe /action=patch,否则 PSWindowsUpdate 模块会跳过 SQL 相关 KB。
- 补丁前检查是否已部署 SQL Server 累积更新(CU)安装包,路径通常为
C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\ - IIS 应在安装前执行应用池预停:
Get-IISAppPool | Where-Object State -eq 'Started' | Stop-IISAppPool,待补丁完成并验证后再启动 - 安装后检查
Get-WindowsUpdateLog输出,重点排查 0x8024A105(依赖缺失)和 0x80070005(权限不足)错误码
滚动更新不是流程炫技,而是把“单点故障”控制在可接受范围内。只要守住节点粒度、禁用自动重启、协同负载均衡、专案处理关键服务,就能把补丁风险降到最低。











