Вернуть несколько значений в PowerShell

Учитывая следующий сценарий, как я могу вернуть две переменные в основной код?

Я пробовал команду return, но выдает ошибку. Пожалуйста, найдите код и сообщение об ошибке ниже.

Код:

workflow Test-MultiReturnVals
{
  parallel
  {
    $a = @(Test-Connection 8.8.8.8 -count 3)  
    $b = @(Test-Connection 4.2.2.1 -count 3)
    return $a, $b
  }
}
$c, $d = Test-MultiReturnVals
$c

Ошибка:

Microsoft.PowerShell.Utility\Write-Error : The workflow was terminated by a
Terminate activity.
At RunScripts:9 char:9
+
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WorkflowReturnException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Workflow.WorkflowReturnException,Microsoft.PowerShell.Commands.WriteErrorCommand
    + PSComputerName        : [localhost]

person Sagor Sen Golder    schedule 21.11.2017    source источник
comment
Есть ли конкретная причина, по которой вы используете рабочий процесс? Если вы просто хотите запускать что-то параллельно, вам, вероятно, лучше использовать фоновые задания.   -  person Ansgar Wiechers    schedule 21.11.2017


Ответы (1)


У вас не должно быть оператора return в параллельном блоке. По определению операторы в параллельном блоке выполняются одновременно, поэтому вы возвращаетесь до того, как значения будут заполнены («возврат» — это завершение действия). Посмотрите здесь: https://docs.microsoft.com/en-us/powershell/module/psworkflow/about/about_parallel

Чтобы заставить его работать так, как вы хотите, вам нужно определить переменные перед параллельным блоком, затем сослаться на эти переменные внутри параллельного блока и, наконец, вернуть переменные в конце. Имейте в виду, что вам нужно использовать $WORKFLOW: для ссылки на переменные внутри параллельного блока.

person Mark Birkedal Stjerslev    schedule 27.11.2017