根据我所知,您需要将对RSJob cmdlet的调用包含在
我有多个不同的脚本块,希望使用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
但我不知道为什么前一个没有。
ForEach-Object
调用中。CCD_ 6似乎不直接通过管道接受脚本块。CCD_ 7 cmdlet具有该限制。