我想Start-RSJob
从PoshRSJob模块运行多个不同的脚本块。
我有以下代码:
$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-RSJob 时不使用 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
但我不知道为什么前一个没有。