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

PowerShell 5.1:单行语句排序JSON数组失效,两行正常的原因

PowerShell 5.1单行管道排序失效的原因

在PowerShell 5.1环境中,读取JSON数组并按Version属性降序排序时,单行管道语句无法得到预期排序结果,但拆分为两行却能正常生效,核心差异源于ConvertFrom-Json的输出行为以及排序逻辑的隐性区别:

代码示例

【正常生效】

$versions = Get-Content $jsonFilePath | Out-String | ConvertFrom-Json
$versions = $versions | Sort-Object -Descending -Property Version

【无法生效】

$versions = Get-Content $jsonFilePath | Out-String | ConvertFrom-Json | Sort-Object -Descending -Property Version

补充JSON内容

[
    {
        "UIVersion":  "2024.21.5",
        "Version":  "12.5.1.1"
    },
    {
        "UIVersion":  "2024.20.15",
        "Version":  "12.5.1"
    },
    {
        "UIVersion":  "2024.20.10",
        "Version":  "12.5"
    },
    {
        "UIVersion":  "2024.20.9",
        "Version":  "12.3.6"
    },
    {
        "UIVersion":  "2024.20.7",
        "Version":  "12.3.6"
    },
    {
        "UIVersion":  "2024.20.1",
        "Version":  "12.3.6"
    },
    {
        "UIVersion":  "2024.20.6.2",
        "Version":  "12.3.6"
    },
    {
        "UIVersion":  "2024.20.100",
        "Version":  "12.3.6"
    },
    {
        "UIVersion":  "2024.20.200",
        "Version":  "12.3.6"
    },
    {
        "UIVersion":  "2024.20.9.1",
        "Version":  "12.3.6"
    },
    {
        "UIVersion":  "2024.26.3.1",
        "Version":  "12.3.6"
    }
]

差异原因

  1. ConvertFrom-Json的输出行为差异:

    • 直接赋值给变量时,ConvertFrom-Json返回完整的PSCustomObject[]数组对象;
    • 放入管道时,PowerShell会自动展开数组,将每个元素逐个传递给后续的Sort-Object。
  2. 排序逻辑的隐性区别:
    理论上两种方式排序结果应一致,但PowerShell 5.1中存在隐性行为:当Sort-Object接收逐个传递的元素时,对于字符串类型的Version属性,会严格按字符顺序排序(而非版本号逻辑),可能导致结果不符合预期;而先将数组赋值给变量再排序时,Sort-Object对整个数组的处理更稳定,更容易保证排序逻辑的一致性。

  3. 版本号排序的修正方案:
    若需按版本号而非字符顺序排序,无论单行还是两行,都应将Version属性转换为[version]类型,修正后的单行代码如下:

    $versions = Get-Content $jsonFilePath | Out-String | ConvertFrom-Json | Sort-Object -Descending -Property { [version]$_.Version }
    

内容的提问来源于stack exchange,提问作者Craig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:43:09