ScriptBlock 中的多个命令

Multiple commands within ScriptBlock

我在 Scriptblock 参数中遇到 运行 多个命令的问题。所有文档都指向使用分号分隔 cmdlet。使用通过分号分隔 cmdlet 的相同方法适用于我的本地计算机,但不适用于通过 invoke-command 的远程计算机。

例如,下面的代码只会returnGet-Service的结果,而不是Get-Process

Invoke-Command -ComputerName cas-bkupexec -ScriptBlock { Get-Service;  Get-Process }

如何才能成功地实现两个命令的预期结果 运行 并接收每个命令的输出?

您可以尝试用逗号分隔它们,这将使结果成为一个数组,然后您可以按每个索引查看该数组。

$Results = Invoke-Command -ComputerName cas-bkupexec -ScriptBlock { (Get-Service), (Get-Process) }

#Services
$Results[0]

#Processes
$Results[1]

我可以重现这个..它只是 returns 第一个语句。这不是分号,如果你使用 like breaks,它会做同样的事情。

这些选项有效:

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 的错误。

上面提到的答案选项对我不起作用。但是,我使用以下命令工作。

Invoke-Command -ComputerName computer -ScriptBlock {(Get-Service), (Get-Process)}