$output = "" | Select VmName, PgName $output.VmName = "value1" $output.PgName = "value2"
This was intriguing to me. The “proper” way to create an object with attributes is to use New-Object and pipeline it through some Add-Member commands.
$output = New-Object PSObject | Add-Member -PassThru NoteProperty VmName "value1" | Add-Member -PassThru NoteProperty PgName "value2"
That creates an excessive, and somewhat unreadable, pipeline for objects with a long list of members, especially if a member’s name is long. It’s a pretty neat trick to make your code look pretty neat.