Добавить элемент в arraylist в процессе PowerSach foreach -parallel
Как мы можем добавить элемент в массив при использовании 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
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
Я не думаю, что вы можете сделать это. В этой статье об ограничениях рабочего процесса Powershell "вызов метода для объектов" рассматривается как неподдерживаемое действие, поэтому .add()
метод на вашем arraylist не будет работать.