ScriptBlock中的多个命令

时间:2016-08-01 18:02:31

标签: powershell invoke-command

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

例如,以下代码仅返回#!/usr/bin/python from multiprocessing import Pool, Manager def spammer_task(d, my_list): #Initialize manager dict d['task'] = { 'processed_list': [] } for ele in my_list: #process here foo = d['task'] foo['processed_list'].append(ele) d['task'] = foo return p = Pool() m = Manager() d = m.dict() my_list = ["one", "two", "three"] p.apply_async(spammer_task (d, my_list)) print d 的结果,而不是Get-Service

Get-Process

如何实现两个命令成功运行并获得每个命令的输出所需的结果?

3 个答案:

答案 0 :(得分:3)

我能够重现这个..它只返回第一个语句。它不是分号,如果你使用类似的休息,它会做同样的事情。

这些选项有效:

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

答案 1 :(得分:1)

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

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

#Services
$Results[0]

#Processes
$Results[1]

答案 2 :(得分:0)

上述作为答案的选项对我不起作用。但是,我使用下面的命令来工作。

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