Запуск нескольких разных ScriptBlocks с RSJobs

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

Но я понятия не имею, почему предыдущий не сделал.


person sheldonzy    schedule 02.12.2018    source источник
comment
Вы можете получить некоторую подсказку из stackoverflow.com/questions/53470066/   -  person Prasoon Karunan V    schedule 02.12.2018


Ответы (1)


Насколько я могу судить, вам нужно заключить вызов командлета RSJob в вызов ForEach-Object. кажется, что Start-RSJob не напрямую принимает блок сценария через конвейер. командлет Start-Job имеет это ограничение.

person Lee_Dailey    schedule 02.12.2018