要在Foreach并行循环内使用PSCustomObject ,我们首先需要考虑如何在循环内使用变量。
$Out = "PowerShell" ForEach-Object -Parallel{ Write-Output "Hello.... $($using:Out)" }
因此,让我们看看是否可以在$out变量中存储或更改值。
$Out = @() ForEach-Object -Parallel{ $using:out = "Azure" Write-Output "Hello....$($using:out) " }输出结果
Line | 4 | $using:out = "Azure" | ~~~~~~~~~~ | The assignment expression is not valid. The input to an assignment operator must be an object that is able to accept | assignments, such as a variable or a property.
该错误表明该表达式无效,因此我们无法直接操作该变量。因此,我们还有另一种方法可以为其使用临时变量。
$Out = @() ForEach-Object -Parallel{ $dict = $using:out $dict = "Azure" Write-Output "Hello....$dict" }
同样,我们可以使用Temporary变量使用PSCustomObject,如下所示。
$Out = @() $vms = "Testvm1","Testvm2","Testvm3" $vmout = $vms | ForEach-Object -Parallel{ $dict = $using:out $dict += [PSCustomObject]@{ VMName = $_ Location = 'EastUS' } return $dict } Write-Output "VM Output" $vmout输出结果
VMName Location ------ -------- Testvm1 EastUS Testvm2 EastUS Testvm3 EastUS