我有多个不同的脚本块要运行
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
:
Stack empty.
Hello from 3
从执行的工作中
$SB4
:
Stack empty.
Hello from 4
从另外两份工作中我得到了预期的结果:
Hello from 1
Hello from 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
但我不知道前一个为什么没有。