2013-07-17 50 views
2

我有一个powershell 2.0脚本,它应该在多个服务器上运行命令并处理输出。 我想运行后台作业中的每个服务器的命令和处理。在后台作业中调用命令

的COMAND工作没有任何问题,并在终止半秒或更少:

Invoke-Command -ComputerName $client -ScriptBlock { #do some stuff } 

但是,当我在后台作业运行此,作业不会终止:

Start-Job { Invoke-Command -ComputerName $client -ScriptBlock { #do some stuff } } 

有人知道问题可能是什么?

回答

4

看起来你应该做它的其他方式:

http://technet.microsoft.com/en-us/library/hh849698.aspx

要运行远程计算机上的后台作业,使用AsJob参数 上可用的许多cmdlet或使用Invoke-Command cmdlet至 在远程计算机上运行Start-Job命令。欲了解更多信息,请登录about_Remote_Jobs,查询 。

+0

但这运行在远程计算机上工作。我想在执行的计算机上运行作业,并在此作业中处理来自invoke-command的输出。 – bones

+1

@bones我认为效果是一样的。 'Invoke-Command'应该启动远程机器上的作业并立即返回。你可以使用'Receive-Job -ComputerName'来获得结果。 –

1

我更喜欢使用Start-Job运行invoke-command,以便我可以使用Get-Job在中央计算机上观看和处理作业。

当我遍历“远程计算机列表”时,我使用“当前计算机名称”作为开始作业中的-Name参数,以便我可以单独或作为一组观察每个作业。

只是我的经验两美分。

编辑示例:

$job = 
{ 
    $remoteJob = { ##Do Stuff Here } 
    Invoke-Command -ComputerName $args[0] -ScriptBlock $remoteJob 
} 
Start-Job -Name <jobName> -ScriptBlock $job -ArgumentList <remoteComputer> 

您关于为什么工作“无法完成”我根本就没有其他的输入,请确保您正在远程运行代码没有真正结束的问题。

希望这有助于

0

这也将工作,至少在PowerShell中5

invoke-command -asjob -computer $PC -scriptblock { ## do stuff }