如何在 Powershell 中按对象的属性值之一对对象数组进行排序?

rGA*_*145 7 arrays sorting powershell

例如,我有一个变量,它返回包含多个数组的行:

@{sourceDSAcn=B; LastSyncResult=0} @{sourceDSAcn=A; LastSyncResult=9} @{sourceDSAcn=C; LastSyncResult=0} @{sourceDSAcn=M; Last SyncResult=10}
Run Code Online (Sandbox Code Playgroud)

我想按参数之一按字母顺序对这一行进行排序。在这种情况下 - 由sourceDSAcn,所以结果必须是这样的:

@{sourceDSAcn=A; LastSyncResult=9} @{sourceDSAcn=B; LastSyncResult=0} @{sourceDSAcn=C; LastSyncResult=0} @{sourceDSAcn=M; Last SyncResult=10}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

mkl*_*nt0 8

您的输出格式表明两件事:

  • 这些对象不是数组,而是自定义对象[pscustomobject]实例)。

  • 您已使用Write-Hostcmdet 将这些对象打印到主机(显示),这会导致您的问题中显示类似哈希表文字的表示(请参阅此答案)。

    • 相反,如果您希望默认情况下获得通常的丰富显示格式 - 同时仍然仅将输出发送到主机不是成功输出流- 您可以使用Out-Hostcmdlet。
    • 相反,要向管道生成数据输出,请使用cmdlet,或者最好使用 PowerShell 的隐式输出功能,如下所示;有关更多信息,请参阅此答案Write-Output

为了按给定属性对(自定义)对象进行排序,只需将该属性的名称传递给
Sort-Object(位置隐含的)-Property参数,正如Mathias R. Jessen所建议的那样:

# Using $variable by itself implicitly sends its value through the pipeline.
# It is equivalent to: Write-Output $variable | ...
$variable | Sort-Object sourceDSAcn # same as: ... | Sort-Object -Property sourceDSAcn
Run Code Online (Sandbox Code Playgroud)