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)}
我在 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)}