добавить элемент в arraylist в рабочем процессе powershell foreach -parallel

Как мы можем добавить элемент в arraylist при использовании цикла foreach -parallel в рабочих процессах powershell?

workflow foreachpsptest { 
  param([string[]]$list)
  $newList = [System.Collections.ArrayList]@()
  foreach –parallel ($item in $list){
    $num = Get-Random 
    InlineScript {
      ($USING:newList).add("$num---$item")
    }
  }
  Write-Output -InputObject "randomly created new List: $newList"
} 
$list = @("asd","zxc","qwe","cnsn")
foreachpsptest -list $list

person cansin aldanmaz    schedule 28.01.2016    source источник


Ответы (2)


Проблема здесь в том, что вы используете $using: неправильный способ.

Ваш рабочий процесс — это, по сути, собственная песочница. Вы можете использовать $using для создания экземпляра переменной с теми же значениями внутри нее, но вы не можете использовать ее для управления той же переменной вне ее.

Однако рабочий процесс может создавать объект, а затем записывать его с помощью метода .Add() вашей переменной $newlist Arraylist.

Настройте код так, и он должен работать:

#Moved the Arraylist declaration outside
$newList = [System.Collections.ArrayList]@()

workflow foreachpsptest { 
param([string[]]$list)
foreach –parallel ($item in $list){
      $num = Get-Random 
      InlineScript {
      #use the using: context to pass along values, then emit the current object
      "$using:num---$using:item"
      }
}
} 

$list = @("asd","zxc","qwe","cnsn")
#kick off the workflow and capture results in our arraylist
$newList.add((foreachpsptest -list $list))

Затем, после выполнения кода, мы можем получить значения, вот так.

$newList
58665978---qwe
173370163---zxc
1332423298---cnsn
533382950---asd
person FoxDeploy    schedule 28.01.2016
comment
Да, это хороший обходной путь, но в этом случае $newList содержит только один элемент. Нам нужен другой обходной путь, такой как разделение, чтобы обнаружить настоящий список. - person cansin aldanmaz; 28.01.2016

Я не думаю, что вы можете сделать это. Эта статья о рабочем процессе Powershell ограничения вызывают «Вызов метода для объектов» как неподдерживаемое действие, поэтому метод .add() в вашем массиве не будет работать.

person mjolinor    schedule 28.01.2016