Format-List:按名称排序属性

Pao*_*sco 8 sorting powershell

是否可以按属性名称对Format-List cmdlet的输出进行排序?
假设我有一个带有两个属性"A"和"B"的对象$ x,当我用它运行Format-List时,我得到了

(PS) > $x | Format-List
B : value b
A : value a
Run Code Online (Sandbox Code Playgroud)

我想拥有

(PS) > $x | Format-List 
A : value a
B : value b
Run Code Online (Sandbox Code Playgroud)

注意:我应该从一开始就指定,与具有"A"和"B"属性的示例不同,我必须处理的真实对象具有相当多的属性,并且将来可以添加新的属性,所以我事先并不知道所有的房产名称.

jim*_*gee 12

接受的答案没有任何问题,但是一次性的真正快速而肮脏的选择(不需要将集合已经存在于变量中)可能是......

... | Format-List | Out-String -Stream | Sort-Object
Run Code Online (Sandbox Code Playgroud)

...它对 输出的每一行进行排序Format-List

请注意,进入下一行的任何属性值都将被破坏(并且可能出现在输出的顶部),但这可以通过稍微不太令人难忘的方法来修复...

... | Format-List | Out-String -Stream -Width ([Int32]::MaxValue) | Sort-Object
Run Code Online (Sandbox Code Playgroud)

...以牺牲列缩进为代价。

当然,所有对象/管道信息都会因该Out-String调用而丢失,尽管考虑到同样的情况Format-List,您可能不会在意这一点。


Rom*_*min 10

AFAIK,Format-List没有提供这样的选择.

对于您的特定示例,这应该工作:

$x | Select-Object A, B | Format-List
Run Code Online (Sandbox Code Playgroud)

如果属性集不是固定/已知的,那么使用Get-Member和一些预处理制作排序参数数组的过程将更加棘手Select-Object.

编辑:

这是(让我们使用$ host而不是$ x):

$host | Select-Object ([string[]]($host | Get-Member -MemberType Property | %{ $_.Name } | Sort-Object)) | Format-List
Run Code Online (Sandbox Code Playgroud)

克里斯托弗是对的,Select-Object并非绝对需要:

$host | Format-List ([string[]]($host | Get-Member -MemberType Property | %{ $_.Name } | Sort-Object))
Run Code Online (Sandbox Code Playgroud)


Joh*_*son 5

扩展克里斯托弗的想法,使用get-memberformat-list -Property

$x | fl -property ($x| gm | sort name).name
Run Code Online (Sandbox Code Playgroud)