问题描述
需要使用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
}
}
解决方法
从评论继续
-
您的变量缺少美元符号。
-
在脚本中使用别名被认为是不好的做法。
-
sleep命令似乎不必要,尤其是第一个命令。在上一行完成之前,下一行将不运行。
-
缩进和间距有助于更轻松地查看语法/流问题。
-
Splatting还有助于提高可读性/调试性。
-
详细信息可以为调试提供有价值的反馈。
$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
}