需要使用powershell脚本并行修补远程服务器。但是Get-WindowsUpdate命令不会下载/安装补丁,也不会引发任何错误。
MySession = New-PSSession -ComputerName $ComputerName -Credential $cred
Start-Sleep -Seconds 30
Invoke-Command -Session $MySession -ScriptBlock {
Start-Sleep -Seconds 5
ipmo PSWindowsUpdate;
try{
Get-WindowsUpdate -IgnoreUserInput -ForceDownload -Install -AcceptAll -AutoReboot -Confirm:$false
}
catch{
Write-Host $_.Exception.Message
}
}
从评论继续
-
您的变量缺少美元符号。
-
在脚本中使用别名被认为是一种不好的做法。
-
睡眠命令似乎没有必要,尤其是第一个命令。直到上一行完成,下一行才会运行。
-
缩进和间距有助于更容易地查看语法/流问题。
-
飞溅也有助于可读性/调试。
-
Verbose可以为调试提供有价值的反馈。
$MySession = New-PSSession -ComputerName $ComputerName -Credential $cred Invoke-Command -Session $MySession -ScriptBlock { $param = @{ IgnoreUserInput = $true ForceDownload = $true Install = $true AcceptAll = $true AutoReboot = $true Confirm = $false Verbose = $true } Start-Sleep -Seconds 5 Import-Module PSWindowsUpdate try { Get-WindowsUpdate @param } catch { Write-Error $_.Exception.Message } }
如果你不确定他们都安装了模块,你可以在脚本块的开头添加这样的东西
if(-not (Get-Module PSWindowsUpdate))
{
Write-Host Installing PSWindowsUpdate module.. -ForegroundColor Cyan
Install-Module PSWindowsUpdate
}