自定义表输出清理 - 格式化数组值属性

时间:2017-02-22 20:56:50

标签: powershell formatting

我的一个班轮看起来像:

get-vm vm* |select name, numcpu,memoryGB,@{e={$_|get-harddisk |select capacityGB};l="disk"}

我的输出如下:

Name            NumCpu MemoryGB disk
----            ------ -------- ----
vm1             4      96       {@{CapacityGB=60}, @{CapacityGB=300}, @{CapacityGB=200}}
vm2             8      98       {@{CapacityGB=50}, @{CapacityGB=450}}
vm3             8      96       {@{CapacityGB=200}, @{CapacityGB=50}, @{CapacityGB=300}}
vm4             2      12       {@{CapacityGB=100}, @{CapacityGB=50}}

如何清除该输出以仅显示磁盘大小编号而不是@{capacityGB= }

1 个答案:

答案 0 :(得分:1)

立即解决方法是使用select -ExpandProperty capacityGB

get-vm vm* |select name, numcpu,memoryGB,@{e={$_|get-harddisk |select -ExpandProperty capacityGB};l="disk"}

这会导致类似:

Name            NumCpu MemoryGB disk
----            ------ -------- ----
vm1             4       96      {60, 300, 200}

-ExpandProperty表示只返回指定属性的,而不是具有指定属性的自定义对象,这类似于{{ 1}}代表你的输出。

请注意PowerShell:

  • 使用封闭@{CapacityGB=60}来表示数组值属性

  • 如果您将它们转换为{ ... }(或在双引号字符串中使用它们),则表示各个元素。

如果输出仅用于显示,并且您需要不同的格式,请在脚本块内构建自己的输出字符串,如Frode F.'s helpful answer所示。