You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PowerShell的PSObject格式化为每行一个属性的表格?

问题描述

我创建了一个简单的PSObject:

$obj = New-Object -TypeName psobject
$obj | Add-Member -MemberType NoteProperty -Name A -Value 'x'
$obj | Add-Member -MemberType NoteProperty -Name B -Value 'y'

直接输入$obj或者执行Write-Host ($obj | Out-String),输出是列式表格:

A B
- -
x y

但我需要每行一个属性的格式,也就是:

A : x
B : y

有资料说会自动输出这种格式,但实际不是这样,请问哪里操作错了?

补充说明:当属性值较长时,默认的表格格式可读性很差,示例如下:

> $obj = New-Object -TypeName psobject
> $obj | Add-Member -MemberType NoteProperty -Name A -Value 'https://abcdef/ghijkl/mnopqr/stuvwx?y=z'
> $obj | Add-Member -MemberType NoteProperty -Name B -Value 'https://abcdef/ghijkl/mnopqr/stuvwx?y=z'

> $obj

A                                       B
-                                       -
https://abcdef/ghijkl/mnopqr/stuvwx?y=z https://abcdef/ghijkl/mnopqr/stuvwx?y=z
解决方案

PowerShell的默认格式化规则是根据对象的属性数量、属性值长度自动选择输出样式:当对象属性数量较少(通常≤4个)且值较短时,默认用表格格式输出;只有当属性数量多,或者属性值长度超过控制台宽度阈值时,才会自动切换为列表格式。你的场景里,即使属性值较长,但两个属性的总宽度还没触发自动切换的阈值,所以依然是表格格式。

要强制输出每行一个属性的列表格式,直接使用Format-List命令(可缩写为fl):

方法1:直接管道输出到Format-List

$obj | Format-List

输出结果:

A : x
B : y

对于长值的场景:

$obj | Format-List

输出结果:

A : https://abcdef/ghijkl/mnopqr/stuvwx?y=z
B : https://abcdef/ghijkl/mnopqr/stuvwx?y=z

方法2:结合Out-String使用(如果需要转成字符串)

如果要像之前的Write-Host ($obj | Out-String)那样转成字符串输出,只需改成:

Write-Host ($obj | Format-List | Out-String)

日常使用中直接用Format-List是最简便的方式,若需让这类对象默认以列表格式输出,可创建自定义格式文件,但一般没必要。

内容的提问来源于stack exchange,提问作者F-H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:10:05