使用RSJob运行多个不同的ScriptBlock

时间:2018-12-02 10:11:33

标签: powershell jobs scriptblock poshrsjob

我想使用PoshRSJob模块中的FooTestTest运行多个不同的脚本块。

我有以下代码:

Start-RSJob

这是可行的,但我有时会在工作中遇到错误(有时没有错误,有时会出现错误),就像执行$SB1 = {Write-Output "Hello from 1"} $SB2 = {Write-Output "Hello from 2"} $SB3 = {Write-Output "Hello from 3"} $SB4 = {Write-Output "Hello from 4"} $SBs = @($SB1, $SB2, $SB3, $SB4) $SBs | Start-RSJob -ScriptBlock { $PSBoundParameters.GetEnumerator() | ForEach { . $_.Value } } Get-RSJob | Wait-RSJob 的工作一样:

Stack empty.
Hello from 3 

从执行$SB3的作业开始:

Stack empty.
Hello from 4

从其他两个作业中,我得到了预期的输出:

Hello from 1
Hello from 2

我没有使用$SB4来开始新工作,因为创建者是这样说的:

  

请注意,使用Start-RSJob时不使用ForEach。这需要   直接从管道输入以正常工作并充分利用   节流能力。

编辑:

因此,以下工作有效:

ForEach

但是我不知道为什么上一个没有。

1 个答案:

答案 0 :(得分:0)

据我所知,您需要在ForEach-Object调用中包含对RSJob cmdlet的调用。看来Start-RSJob不能直接通过管道接受 Start-Job cmdlet具有该限制。