У меня есть несколько различных блоков сценариев, которые я хочу запустить с 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
для запуска новых заданий, потому что так сказал создатель:
Обратите внимание, что я не использую ForEach при использовании 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)
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
Но японятия не имею, почему предыдущий не сделал.