使用RSJobs运行多个不同的ScriptBlock



我有多个不同的脚本块,希望使用PoshRSJob模块中的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

这是有效的,但我有时会在作业中遇到错误(有时没有错误,有时有错误(,比如执行$SB3:的作业

堆栈为空。你好,来自3

以及执行$SB4:的作业

堆栈为空。你好,来自4

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

你好,来自1你好,来自2

我不使用ForEach来开始新的工作,因为创建者就是这么说的:

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

编辑:

因此以下工作:

$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)
Get-RSJob | Remove-RSJob
$SBs |Start-RSJob -ScriptBlock {
$PSBoundParameters.GetEnumerator() | ForEach {
$SB_run = [ScriptBlock]::Create($_.Value)
$SB_run.Invoke()
}
}
Get-RSJob | Wait-RSJob | Receive-RSJob

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

根据我所知,您需要将对RSJob cmdlet的调用包含在ForEach-Object调用中。CCD_ 6似乎不直接通过管道接受脚本块。CCD_ 7 cmdlet具有该限制。

相关内容

  • 没有找到相关文章

最新更新