我在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
如何实现两个命令成功运行并获得每个命令的输出所需的结果?
答案 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)}