2016-07-05 3 views
0

Я пытаюсь получить мои ноги влажными с Powershell Workflows, и некоторые работы, которые мне нужно сделать параллельно.Trouble Understanding Powershell Workflow ForEach

Я не очень далек до удара моего первого контрольно-пропускного пункта, но я не понимаю, что я делаю неправильно здесь:

$operations = ,("Item0", "Item1") 

ForEach ($operation in $operations) { 
    Write-Output "Item0: $($operation.Item(0)) Item1: $($operation.Item(1))" 
} 

workflow operationsWorkflow{ 
    Write-Output "Running Workflow" 
    $operations = ,("Item0", "Item1") 
    ForEach -Parallel ($operation in $operations) { 
     #Fails: Method invocation failed because [System.String] does not contain a method named 'Item'. 
     #Write-Output "Item0: $($operation.Item(0)) Item1: $($operation.Item(1))" 

     Write-Output "Item $operation" 
    } 
} 

operationsWorkflow 
+0

До сих пор все, что я могу сказать, заключается в том, что в этом случае комманда не работает над созданием массива. Мое первое предположение заключалось бы в использовании .NET '[System.Collections.Generic.List [string []]]' или что-то похожее вместо того, чтобы полагаться на магию массива powershell. – Eris

+0

Примечание: даже прокомментированная строка работает, если '$ operations' содержит более одного элемента массива. Например: '$ operations = @ ((" Item0 "," Item1 "), (" ItemA "," ItemB "))' – Eris

+0

Я хочу, чтобы PowerShell, я просто всегда смущен этим ... –

ответ

0

Проблема решена, благодаря this excellent article on powershell arrays

Теперь, поскольку это уже массив, его повторное включение не приводит к второму уровню вложенности :

PS (66)> $ a = [array] [array] 1

PS (67)> $ а [0]

Однако с помощью 2 запятые делает гнездо массива, поскольку он является массивом операции конструкция:

PS (68) > $ а = 1 ,,

PS (69)> $ а [0] [0]

Учитывая, что это работает отлично:

workflow operationsWorkflow{ 
    Write-Output "Running Workflow" 
    $operations = ,,("Item0", "Item1") 
    ForEach -Parallel ($operation in $operations) { 
      Write-Output "Item0: $($operation.Item(0)) Item1: $($operation.Item(1))" 
    } 
} 

operationsWorkflow 

Однако, если вторая запятая добавляется вне процесса, то там происходят ошибки. Так что это проблема workflow или parallel.

Смежные вопросы