Powershell Sort-Object PSCustomObject with Object[] as value

495 Views Asked by At

I am using RestAPI access to azure. I am getting a list of changesets for a build ID.

I would like to sort the object type with increasing Changeset number.

The type I receive for $changeset.GetType():

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

This is the output $changeset:

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

Therefore, I checked the type of value $changeset.value.GetType():

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

And afterwards I checked the type of an element:

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

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

I did try Sort-Object with ascending and descending, but it does not change the order:

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

I would like to keep the structure as it is to not break something. There are lots of properties within the component.

2

There are 2 best solutions below

1
On BEST ANSWER

Without an example working dataset, it's hard create an absolute working solution for your use case, however you could sort the data using the below:

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

This would return all of the objects under the immediate property value and sorted on the property id.

0
On

If you want to retain the object as a whole with its present structure:

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

That is:

  • You must apply the Sort-Object call to the .value property, which contains the array of [pscustomobject] instances you want to sort by their .Id property values.

  • Enclosing the command in @(...), the array-subexpression operator, ensures that the sort objects are treated as an array, even if situationally only one object may be present.

  • Assigning the results back to $changeset.value replaces the original array with a new, sorted array.