重启后如何远程检测windows已完成补丁配置

Pet*_*rik 10 windows unattended winrm

我们计划为我们的构建基础架构自动创建 VM,以便我们可以:

  1. 根据需求扩展构建资源,例如在需要时添加更多构建代理并在不需要时删除它们
  2. 如果/当机器死亡时重新创建全部或部分构建环境
  3. 当我们需要设置测试时复制构建环境

此过程中的步骤之一是自动创建 VM 基础映像(在我们的示例中使用 Hyper-V)。为此,我们有一个脚本:

  1. 使用Convert-WindowsImage脚本从 ISO 创建新的 VHDX 。我们目前使用的是 Windows 2012R2,但希望在 2016 可用后尽快开始使用。
  2. 使用我们需要的所有基本配置向新 VHDX 添加无人参与脚本
  3. 使用Apply-WindowsUpdate脚本使用最新的 Windows 补丁更新 VHDX
  4. 基于 VHDX 创建一个新的 Hyper-V VM 并启动它
  5. 等待 VM 启动并等待 WinRM 服务准备好接受远程连接
  6. 等待windows完成初始配置和新补丁的配置
  7. 应用任何进一步的补丁
  8. 重启完成最新补丁的配置
  9. 等待 Windows 完成补丁配置
  10. 将 sysprep 脚本推送到机器并调用该脚本。这将运行 sysprep,然后关闭机器
  11. 删除 VM 但保留 VHDX
  12. 从 VHDX 中删除 sysprep 和无人参与文件,然后压缩 VHDX
  13. 将 VHDX 移动到模板位置并标记为只读

我们遇到的问题是在第 6 步和第 9 步。理想情况下,我们在重新启动/关闭机器之前等待所有配置完成,但似乎没有一种方法可以检测到 Windows 已完成配置阶段。

在浏览 UI 时,任何一个步骤何时完成都非常清楚,因为登录 UI 在进程准备就绪之前不会显示。然而,当使用 WinRM 远程连接到机器时,这不太清楚,因为 WinRM 在完成配置工作之前提供了对机器的访问。

所以问题是通过远程连接检测 Windows 已完成配置更新等的最简单的方法是什么,以便我们可以重新启动/关闭机器而不会在以后引起问题。

- - - 编辑 - - -

最后,我们使用了 Katherine 答案的修改版本,因为我们的脚本也在等待windeployngen完成。鉴于这ngen在操作系统完成初始化之后才完成,作为奖励,最终的 VHDX 将拥有所有 .NET 框架,这意味着我们在创建新框架时不必处理它模板盘的虚拟机。我们用来创建VHDX 模板的脚本和创建本地测试环境的脚本都在 github 上,以防有人感兴趣。

Kat*_*ard 6

这听起来像是一个奇怪的答案,但是......

有一个 PowerShell 脚本用于检查 Nagios 是否有可用的更新。您可能会出于您的目的使用此脚本或变体,而无需 Nagios。

至于它们是否在进行中,请检查 Wuauclt 和 TrustedInstaller 是否正在运行。 微软关于服务器核心更新的建议可能在这里有所帮助

根据安装的更新,您可能需要重新启动计算机,但系统不会通知您。要确定安装过程是否已完成,请使用任务管理器验证 Wuauclt 或 Trusted Installer 进程是否未在主动运行。您还可以使用“查看已安装的更新”部分中的方法来检查已安装的更新列表。

您可能可以使用类似Get-Process -Computername YourImage TrustedInstaller.exe. 在 Wuauclt 和 TrustedInstaller 进程都完成后,重新启动应该是安全的。