Powershell Sort-Object PSCustomObject with Object[] 作为值

Powershell Sort-Object PSCustomObject with Object[] as value

我正在使用 RestAPI 访问 azure。我正在获取构建 ID 的变更集列表。

我想用递增的变更集编号对对象类型进行排序。

我收到的 $changeset.GetType() 类型:

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    PSCustomObject                           System.Object

这是输出 $changeset:

count value
----- -----
   50 {@{id=68.......

因此,我检查了值的类型 $changeset.value.GetType():

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

然后我检查了一个元素的类型:

$changeset.value[0].GetType():

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    PSCustomObject                           System.Object

我确实尝试过 Sort-Object 升序和降序,但它并没有改变顺序:

$changeset = $changeset | sort-object { $_.value.id } -desc

我想保持结构不变,以免破坏某些东西。组件中有很多属性。

没有示例工作数据集,很难为您的用例创建绝对可行的解决方案,但是您可以使用以下方法对数据进行排序:

$changeset | Select-Object -ExpandProperty value | Sort-Object -Property id

这将 return 直接 属性 value 下的所有对象并按 属性 id.

排序

如果您想保留对象作为一个整体及其当前结构:

$changeset.value = @($changeset.value | Sort-Object -Descending -Property Id)

即:

  • 您必须将 Sort-Object 调用应用到 .value 属性,其中包含要按其排序的 [pscustomobject] 个实例的数组.Id 属性 个值。

  • @(...) 中包含命令,array-subexpression operator 确保排序对象被视为一个数组,即使在某些情况下只有 一个 对象可能存在。

  • 将结果分配回 $changeset.value 会将原始数组替换为新的排序数组。