【问题标题】:Automating WSUS updates with PowerShell/PowerCLI使用 PowerShell/PowerCLI 自动更新 WSUS
【发布时间】:2017-09-01 14:27:58
【问题描述】:

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

  • 检查特定 VM 是否有要安装的任何 WSUS 更新
  • 如果有可用更新,请拍摄 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
      }
   }
}

在此之后,我想检查是否存在 vm 的快照,然后安装 WSUS 更新。如果需要重新启动,则重新启动。

有没有办法做到这一点?更好的方法来做到这一点?真的很感激一些见解,我是 Powershell 的新手。

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

【问题讨论】:

  • 你是怎么得到$vms的列表的?
  • @TheIncorrigible1 我没有在脚本中包含该部分,$vms 是通过文本文件填充的。这就是此时需要填充 $vms 的方式。

标签: powershell powercli


【解决方案1】:

是的,您需要在每个 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

【讨论】:

  • 去试试这个,我会让你知道它是怎么回事。我的一些虚拟机需要最新的框架包,所以我必须先推出它。
猜你喜欢
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
相关资源
最近更新 更多