通过 Invoke-WUJob 远程更新 Windows 服务器

通过 Invoke-WUJob 远程更新 Windows 服务器

我正在尝试通过此脚本块使用 PS 模块 PSWindowsUpdate 远程更新 Windows 服务器:

#Will Update Windows, automatically reboot and out the log in the specified directory. This will be done to all listed Servers
ForEach ($Index in $Servers)
{
    $Scriptblock = {
        Invoke-WUJob -Comp $Index -RunNow -Confirm:$false -Verbose -Script {
            Install-WindowsUpdate -MicrosoftUpdate -NotCategory "SilverLight" -NotTitle "Preview" -AcceptAll -AutoReboot | Out-File C:\PSWindowsUpdate.log
            }
        }
    Invoke-Command -Comp $Index -ScriptBlock $Scriptblock
}

然而,任务是在远程 PC 上创建的,我正在使用 ID 4702“其他对象访问事件”进行测试。但即使计划任务中包含了所有信息,它似乎也从未真正执行任何操作。

我已经在主机和远程服务器上安装了模块,安装了 NuGet 并且启用了 TLS 1.2。

PSWindowsUpdate.log 文件是在 (C:) 中创建的,但其中没有任何内容。脚本的其余部分只是停止一些服务,并在所谓的更新完成后启动它们,这似乎也有效。

我还尝试远程激活服务器上的另一个更新脚本,该脚本应该下载更新并安装它,但我不断收到Access is denied消息,这是预料之中的。

如果您能提供其他解决方案来同时更新多个 Windows 服务器或者让 Invoke-WUJob 正常工作,我们将不胜感激!

答案1

我会尝试这样的事情:

ForEach ($Index in $Servers)
{
    $Scriptblock = {
        Invoke-WUJob -Credential $creds -Taskname WUinstall -Comp $Index -RunNow -Confirm:$false -Verbose -Script {
            Install-WindowsUpdate -MicrosoftUpdate -NotCategory "SilverLight" -NotTitle "Preview" -AcceptAll -AutoReboot | Out-File C:\PSWindowsUpdate.log
        }
    }
Invoke-Command -Comp $Index -ScriptBlock $Scriptblock
}    

我以前在命令中添加 -Credential 参数时曾取得成功。

答案2

这行代码对我来说很管用。但需要高级的 powershell。

$ServerVMs = @("DC1","DC2")

Invoke-WUJob -ComputerName $ServerVMs -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate -AcceptAll | Out-File C:\Windows\PSWindowsUpdate.log } -RunNow -Confirm:$false -Verbose -ErrorAction Ignore

参与的客户虚拟机需要运行此命令才能远程执行更新:

Install-Module PSWindowsUpdate -Force

Import-Module PSWindowsUpdate

以下是查找主机列表上运行的虚拟机的简单方法:

$VMHosts= "VMHOST1","VMHOST2","VMHOST3","VMHOST4"

Invoke-Command ($VMhosts){ Get-VM| select vmname }

相关内容