$vms = @()
$foo = New-Object -TypeName PSObject
$foo | Add-Member -MemberType NoteProperty -Name "Name" -Value "Host1"
$foo | Add-Member -MemberType NoteProperty -Name "OSDisk" -Value "64 GB"
$vms += $foo
$bar = New-Object -TypeName PSObject
$bar | Add-Member -MemberType NoteProperty -Name "Name" -Value "Host2"
$bar | Add-Member -MemberType NoteProperty -Name "OSDisk" -Value "64 GB"
$bar | Add-Member -MemberType NoteProperty -Name "DataDisk1" -Value "128 GB"
$vms += $BAR
$vms[0] | ft
$vms[1] | ft
$vms | ft
As you can see, the second row has more properties than the first row. When displaying, I get only the properties present in the first row, the others are ignored.
PS C:> $vms[0] | ft
Name OSDisk
---- ------
Host1 64 GB
PS C:> $vms[1] | ft
Name OSDisk DataDisk1
---- ------ ---------
Host2 64 GB 128 GB
PS C:> $vms | ft
Name OSDisk
---- ------
Host1 64 GB
Host2 64 GB
What am I hoping to achieve is to have every property in every row:
Name OSDisk DataDisk1
---- ------ ----------
Host1 64 GB
Host2 64 GB 128 GB
[edit] The properties may vary, in my case a VM may have one or more datadisks.