使用 PowerShell/PowerCLI 自动更新 WSUS

Automating WSUS updates with PowerShell/PowerCLI

我希望自动执行在我的 VM 上安装 WSUS 更新的过程。简要概述一下,这是我想要完成的事情(请让我知道我的方法是否愚蠢,我很乐意为所有这些学习正确的方法。):

我目前能够检查特定 VM 是否有更新并拍摄快照。现在我知道我可以只使用脚本的这一部分 运行 并配置一个 GPO 来完成其余的任务,但我的想法是,如果我可以在脚本中完成这一切,我将能够在安装更新之前检查 VM 的快照是否存在。您可以在下面看到我的脚本目前的作用。

foreach ($vm in $vms) {
   if ($vm.PowerState -eq "poweredOn") {
      $output = Invoke-VMScript -ScriptText $script -VM $vm -GuestCredential $guestCred
      if ($output.ScriptOutput -Notlike '0*') {
         New-Snapshot -VM $vm -Name BeforeWSUS
      }
   }
}

在此之后我想执行检查以查看虚拟机的快照是否存在,然后安装 WSUS 更新。如果需要重新启动,则重新启动。

有办法吗?更好的方法吗?非常感谢一些见解,我是 Powershell 的新手。

编辑:我已经检查了 PSWindowsUpdate 模块,它是否需要在我计划更新的每个 VM 上?

是的,您需要在每个 VM 上安装 PSWindowsUpdate。

您可以在脚本中包含类似这样的内容,以检查是否安装了 PSWindowsUpdate,如果没有,请安装它。

Set-PSRepository -Name "PSGallery" -InstallationPolicy Trusted
$Modules = "PSWindowsUpdate"
$Modules | ForEach-Object {
    If (!(Get-Module -ListAvailable -Name $_)) {
            Install-Module $_ -Verbose -Confirm:$false
    }
}

我认为 Install-Module 需要 PowerShell 5.0 版。

然后您将使用 Get-WUInstall 从您的 WSUS 服务器安装更新。 (如果通过 GPO 配置,它似乎默认为 WSUS。)

可能会加入 -Confirm:$False 以避免提示您允许每次更新。

有关 PSWindowsUpdate 的更多信息:https://github.com/joeypiccola/PSWindowsUpdate