【问题标题】:How do I sort an array of objects by one of their property values in Powershell?如何在 Powershell 中按其中一个属性值对对象数组进行排序?
【发布时间】:2020-08-04 20:48:11
【问题描述】:

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

@{sourceDSAcn=B; LastSyncResult=0} @{sourceDSAcn=A; LastSyncResult=9} @{sourceDSAcn=C; LastSyncResult=0} @{sourceDSAcn=M; Last SyncResult=10}

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

@{sourceDSAcn=A; LastSyncResult=9} @{sourceDSAcn=B; LastSyncResult=0} @{sourceDSAcn=C; LastSyncResult=0} @{sourceDSAcn=M; Last SyncResult=10}

我该怎么做?

【问题讨论】:

  • $variable |Sort-Object sourceDSAcn

标签: arrays powershell sorting


【解决方案1】:

您的输出格式暗示了两件事:

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

  • 您已使用 Write-Host cmdet 将这些对象打印到主机(显示),这会导致问题中显示 hashtable-literal-like 表示(请参阅this answer) .

    • 相反,如果您想要默认获得的通常的丰富显示格式 - 同时仍将输出仅发送到 主机 而不是 成功输出流 -您可以使用Out-Host cmdlet。
    • 相反,要生成 data 输出到 pipeline,请使用 Write-Output cmdlet,或者最好使用 PowerShell 的隐式输出功能,如下所示;如需更多信息,请参阅this answer

为了按给定的属性对(自定义)对象进行排序,只需将该属性的名称传递给
Sort-Object(位置隐含)-Property 参数,如@ 987654327@ 很有帮助的建议:

# 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

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    相关资源
    最近更新 更多