Thanks to visit codestin.com
Credit goes to www.tutorialspoint.com

Use PSCustomObject in PowerShell ForEach Parallel Loop



To use the PSCustomObject inside the Foreach Parallel loop, we first need to consider how we are using the variables inside the loop.

$Out = "PowerShell"
ForEach-Object -Parallel{
   Write-Output "Hello.... $($using:Out)"
}

So let see if we can store or change a value in the $out variable.

Example

$Out = @()
ForEach-Object -Parallel{
   $using:out = "Azure"
   Write-Output "Hello....$($using:out) "
}

Output

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.

The error says that the expression is invalid so we can’t manipulate the variable directly. So we have another method that we can use a temporary variable for it.

$Out = @()
ForEach-Object -Parallel{
   $dict = $using:out
   $dict = "Azure"
   Write-Output "Hello....$dict"
}

Similarly, we can use the PSCustomObject using the Temporary variable as shown below.

Example

$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

Output

VMName Location
------ --------
Testvm1 EastUS
Testvm2 EastUS
Testvm3 EastUS
Updated on: 2021-01-04T10:03:29+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements