“无法转换'Microsoft.UpdateServices.Commands.WsusUpdate'”是什么意思?

时间:2019-09-03 09:34:44

标签: powershell windows-update

我收到以下全文错误:

  

无法将“ Microsoft.UpdateServices.Commands.WsusUpdate”转换为类型    参数“更新”所需的“ Microsoft.UpdateServices.Commands.WsusUpdate”。不支持指定的方法。

当我尝试远程接受更新时会发生这种情况。

approve-wsusupdate -update $update -Action Install -targetgroupname "All Computers"

这很好用,并接受$ update变量中提供的信息。 下一行是我遇到错误的地方:

Invoke-Command -computername "Computername" -Scriptblock {invoke-command -computername "Computername2" -Scriptlbock {approve-wsusupdate $args -Action Install -Targetgroupname "All computers"} -Argumentlist $args[1] -Credential $args[0]} -Argumentlist $Cred2, $update -Credential $Cred2

两跳机制有效,我通过在目标服务器上创建文件对它进行了测试。我不明白的是,Update变量在情况1下有效,而在情况2下无效。

放入Argument列表时,变量的类型是否已更改?我的意思是错误表明两次相同的数据类型,我不理解。

希望您能提供帮助

1 个答案:

答案 0 :(得分:0)

您遇到的是Powershell问题,而不是WSUS特定问题。

使用Invoke-Command在远程计算机上运行PowerShell命令时,PowerShell通常假定该命令中的任何变量都是应在远程计算机上创建和使用的变量。换句话说,如果您运行以下命令,请使用the InvokeCommand docs中的示例:

Airline

您的目的是在远程计算机上查找$Log = "PowerShellCore/Operational" Invoke-Command -ComputerName Server01 -ScriptBlock {Get-WinEvent -LogName $Log -MaxEvents 10} 日志事件。但这是行不通的,因为远程计算机运行的是这样的:

PowerShellCore/Operational

并且由于未在远程计算机上定义Get-WinEvent -LogName $Log -MaxEvents 10 变量,因此命令失败。

从PowerShell 3开始,您可以使用$Log范围修饰符解决此问题。如果运行以下命令:

$Using

然后,$Log = "PowerShellCore/Operational" Invoke-Command -ComputerName Server01 -ScriptBlock {Get-WinEvent -LogName $Using:Log -MaxEvents 10} 修饰符意味着将本地$Using变量的内容替换为命令,并且远程计算机将运行以下命令:

$Log

该命令将按预期运行。

有关在双机跳等复杂情况下可帮助您的范围修饰符的更多详细信息,请参阅Remote VariablesScopes的文档。