таблица создается по первому объекту.Если вы хотите отобразить все столбцы:
$propNames = $tagsd | foreach { $_.psobject.Properties.Name } | select -Unique
$tagsd | select $propNames
Кроме того, похоже, есть другие проблемы с вашим кодом.
Если $tags
имеет только одно значение (например, $tags = "none"
), $tags[0]
вернет первый символ «n», а не строку «none».так что вы можете обойти это либо [array]$tags = ...
, либо $tags = @(...)
.
Кроме того, диапазон должен быть 0..($tags.Count -1)
вместо 0..$tags.Count
.
$tagsd = @()
foreach ($a in $vms) {
[array]$tags = (($a.ExtensionData.GetResourceProperties()).Property | where { $_.Name -eq 'summary|tag' }).Value.TrimStart('[').TrimEnd(']').Split(",").Trim()
$object = [pscustomobject]@{ VmName = $a.Name }
if($tags.Count) {
0..($tags.Count - 1) | foreach {
$object | Add-Member -NotePropertyName "VMtag$_" -NotePropertyValue $tags[$_]
}
}
$tagsd += $object
}
Если возможно, лучше избегать индексного доступа к массиву.
$tagsd = foreach ($a in $vms) {
$tags = (($a.ExtensionData.GetResourceProperties()).Property | where { $_.Name -eq 'summary|tag' }).Value.TrimStart('[').TrimEnd(']').Split(",").Trim()
$h = [ordered]@{ VmName = $a.Name }
$tags | foreach { $i = 0 } { $h.Add("VMtag${i}", $_); $i++ }
[pscustomobject]$h
}
$propNames = $tagsd | foreach { $_.psobject.Properties.Name } | select -Unique
$tagsd | select $propNames