Get-WindowsUpdate无法正常工作

问题描述

需要使用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
}
}

解决方法

从评论继续

  1. 您的变量缺少美元符号。

  2. 在脚本中使用别名被认为是不好的做法。

  3. sleep命令似乎不必要,尤其是第一个命令。在上一行完成之前,下一行将不运行。

  4. 缩进和间距有助于更轻松地查看语法/流问题。

  5. Splatting还有助于提高可读性/调试性。

  6. 详细信息可以为调试提供有价值的反馈。

     $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
}