如何测试Windows Server是否已完全更新?(正在尝试创建更新/重新启动循环脚本)



虽然我通常使用预先烘焙的Windows服务器映像,但我偶尔会遇到这样的情况,即我必须从头开始设置映像,并经历检查更新、安装更新然后重新启动的极其乏味的过程。很多,很多,很多次。

我正在尝试编写一个简单的脚本来实现自动化。

检查和安装更新很简单:

wuauclt.exe /detectnow /updatenow

重新启动也同样简单:

shutdown /r /t 0

但我想做的是创建一个PowerShell工作流,在重新启动后继续运行,在循环中运行上述命令。

我还没有弄清楚的领域是:

  • 如何检查更新是否已完成
  • 如何测试是否没有剩余的更新可供安装(AKA Windows已完全更新,脚本可以停止)

使用更新搜索器检查挂起的更新:

$criteria = "Type='software' and IsAssigned=1 and IsHidden=0 and IsInstalled=0"
$searcher = (New-Object -COM Microsoft.Update.Session).CreateUpdateSearcher()
$updates  = $searcher.Search($criteria).Updates
if ($updates.Count -ne 0) {
  # $updates pending
} else {
  # system up-to-date
}

最新更新