在 powershell 工作流中添加一个项目到 arraylist foreach -parallel
add an item to arraylist in powershell workflow foreach -parallel
在 powershell
工作流程中使用 foreach -parallel
循环时,我们如何将项目添加到数组列表?
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
我认为你做不到。 Powershell 工作流限制中的 This article 调用 "Method Invocation on Objects" 作为不受支持的 activity,因此您的数组列表中的 .add()
方法将不起作用。
这里的问题是你用错了,呃$using:
。
您的工作流程基本上是它自己的沙箱。您可以使用 $using 来实例化其中具有相同值的变量,但不能使用它来操作它之外的相同变量。
但是,您可以让工作流发出一个对象,然后使用 $newlist
Arraylist 变量的 .Add() 方法捕获该对象。
像这样调整代码,它应该可以工作:
#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
工作流程中使用 foreach -parallel
循环时,我们如何将项目添加到数组列表?
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
我认为你做不到。 Powershell 工作流限制中的 This article 调用 "Method Invocation on Objects" 作为不受支持的 activity,因此您的数组列表中的 .add()
方法将不起作用。
这里的问题是你用错了,呃$using:
。
您的工作流程基本上是它自己的沙箱。您可以使用 $using 来实例化其中具有相同值的变量,但不能使用它来操作它之外的相同变量。
但是,您可以让工作流发出一个对象,然后使用 $newlist
Arraylist 变量的 .Add() 方法捕获该对象。
像这样调整代码,它应该可以工作:
#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