使用 PowerShell/PowerCLI 自动更新 WSUS
Automating WSUS updates with PowerShell/PowerCLI
我希望自动执行在我的 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
}
}
}
在此之后我想执行检查以查看虚拟机的快照是否存在,然后安装 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
我希望自动执行在我的 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
}
}
}
在此之后我想执行检查以查看虚拟机的快照是否存在,然后安装 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