我在Scriptblock参数中运行多个命令时遇到麻烦。所有文档都指向使用分号在cmdlet之间进行分隔。使用相同的方法通过分号分隔cmdlet可以在我的本地计算机上使用,但不能通过invoke-command在远程计算机上使用。
例如,以下代码将仅返回Get-Service
的结果,而不返回Get-Process
的结果。
Invoke-Command -ComputerName cas-bkupexec -ScriptBlock { Get-Service; Get-Process }
如何获得两个命令成功运行的期望结果并接收每个命令的输出?
最佳答案
我能够重现此..它只返回第一条语句。它不是分号,如果您使用类似break的话,它也会做同样的事情。
这些选项起作用:
Invoke-Command -ComputerName computer -ScriptBlock {
(Get-Service)
Get-Process
}
或奇怪的是:
Invoke-Command -ComputerName computer -ScriptBlock {
& {
Get-Service
Get-Process
}
}
由于将其中一个包装在
( )
中可以工作,我觉得这一定是对管道的怪癖,但是我还无法确切知道它在做什么。更新:
在阅读您的注释说您的源计算机正在运行v5和远程v2之后,我意识到我的测试也是如此。
当我从v5移到其本身时,该问题消失了。
远程从:
v2 -> v5: no issue
v2 -> itself: no issue
v2 -> other v2: no issue
v3 -> v2: no issue
v3 -> v5: no issue
v3 -> itself: no issue
v4 -> v2: no issue
v4 -> v3: no issue
v4 -> itself: no issue
v4 -> v5: no issue
并非所有组合在这里,但似乎确实是从v5到v2的错误。
关于powershell - ScriptBlock中的多个命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38705320/