要在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