PowerShell中PSCustomObject数组格式异常问题求助
解决PSCustomObject数组输出格式问题
你的代码已经正确创建了包含多个PSCustomObject的数组,但PowerShell默认的输出格式化逻辑导致了显示差异——当数组内的对象仅包含单个属性时,PowerShell会自动采用紧凑的表格视图,将同属性的所有值合并为一个集合展示。要得到你期望的每个对象单独展开的格式,可以用以下几种方法:
方法1:强制使用列表格式输出
直接对数组使用Format-List命令,强制每个对象单独显示属性:
$FineData = @() foreach ($Session in $Sessions) { $Job = Get-VBRTaskSession -Session $Session $Result = [pscustomobject]@{ Id = $job.Id.Guid } $FineData += $Result } # 用Format-List输出期望格式 $FineData | Format-List
方法2:优化数组收集+列表输出
PowerShell中用+=构建数组效率较低(每次都会创建新数组),建议直接通过foreach循环收集对象,再配合Format-List输出:
# 直接从foreach循环收集对象到数组 $FineData = foreach ($Session in $Sessions) { $Job = Get-VBRTaskSession -Session $Session [pscustomobject]@{ Id = $job.Id.Guid } } # 输出期望格式 $FineData | Format-List
方法3:循环内直接输出
如果不需要保留数组,可直接在循环内输出每个PSCustomObject,PowerShell会自动按单个对象的列表格式展示:
foreach ($Session in $Sessions) { $Job = Get-VBRTaskSession -Session $Session [pscustomobject]@{ Id = $job.Id.Guid } }
原理说明
PowerShell的格式化引擎会根据对象的属性数量自动选择显示模式:
- 当对象有多个属性时,默认用表格视图
- 当数组内所有对象只有一个属性时,默认用紧凑表格合并显示属性值
Format-List会强制忽略默认规则,将每个对象的属性单独展开显示,完全匹配你的期望格式
内容的提问来源于stack exchange,提问作者Alexey
相关产品推荐
相关产品推荐

