我在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/

10-11 04:33