powershell 如何在GridView中包含所有属性,即使它们在某些对象中不存在?

yhuiod9q  于 12个月前  发布在  Shell
关注(0)|答案(1)|浏览(135)

我使用PowerShell解析XML内容并在网格视图中显示结果。下面是我使用的代码:

$content = @"
<root>
    <obj>
        <name>John</name>
        <age>20</age>
    </obj>
    <obj>
        <name>Mike</name>
        <age>30</age>
        <height>180</height>
    </obj>
</root>
"@

[xml]$doc = $content
$doc.root.obj | select * | ogv

字符串
我遇到的问题是,并非所有属性都显示在网格视图中。例如,网格视图只包含名称、高度和其他一些内置属性-缺少年龄属性。x1c 0d1x
我想在网格视图中包含所有属性,即使它们在某些对象中不存在,并为没有相应属性的对象设置空或0。我如何实现这一点?

fv2wmkja

fv2wmkja1#

Select-Object *的意思是“获取你能找到的任何东西”,这使得Select-Object发现它作为输入接收的第一个对象的所有属性。
相反,从文档中收集 * 所有可能的属性名称 * 的列表,然后在输出之前将其传递给Select-Object

[xml]$doc = $content

# discover all distinct property names under `//root/obj/`
$propertyNames = $doc.root.obj.SelectNodes('./*') |Select-Object -ExpandProperty Name -Unique

# select and export/render
$doc.root.obj |Select-Object -Property $propertyNames |Out-GridView

字符串
输入对象上不存在的任何属性将以$null值结束,而Out-GridView将使相应的单元格为空

相关问题