我收到以下全文错误:
无法将“ 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列表时,变量的类型是否已更改?我的意思是错误表明两次相同的数据类型,我不理解。
希望您能提供帮助
答案 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 Variables和Scopes的文档。