首页 > 解决方案 > 当输出包含@{时如何扩展多个属性,}?

问题描述

我知道有很多关于扩展单个属性的帖子,希望这是一个简单的帖子,但是由于 select-string -simplematch,我的输出看起来像这样

@{品牌=大众; 型号=帕萨特}
@{品牌=福特;型号=蒙迪欧}

但是如何扩展这两个属性并使输出看起来像这样呢?

大众、帕萨特
福特、蒙迪欧

当我做一个选择对象 * 我得到以下但我似乎不能只得到值

IgnoreCase : True
Linenumber : 1
Line : @{Brand=Volkswagen; Model=Passat}
文件名:InputStream
路径:InputStream
模式:@{Brand=Volkwagen; 模型=帕萨特}
上下文:
匹配:{}}

IgnoreCase : True
Linenumber : 2
Line : @{Brand=Ford; Model=Mondeo}
文件名:InputStream
路径:InputStream
模式:@{Brand=Ford; 模型=蒙迪欧}
上下文:
匹配:{}}

标签: powershelloutputselect-stringselect-object

解决方案


不要select-string在 PsObjects 集合上执行此操作,因为该 cmdlet 旨在查找字符串文件中的文本..
Select-Object -ExpandProperty允许您扩展一个属性,而不是全部。如果您想要这样的输出,请遍历数组中的对象并按照您想要的方式将属性组合成一个字符串。

假设你的数组是这样的:

$theCarCollection = [PsCustomObject]@{Brand='Volkswagen'; Model='Passat'},
                    [PsCustomObject]@{Brand='Ford'; Model='Mondeo'}

然后通过遍历对象并选择所需的属性来格式化输出

($theCarCollection | ForEach-Object { '{0}, {1}' -f $_.Brand, $_.Model }) -join [environment]::NewLine

这将输出:

Volkswagen, Passat
Ford, Mondeo

推荐阅读