如何在PowerShell foreach并行循环中使用PSCustomObject?

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

猜你喜欢