'Powershell Sort-Object PSCustomObject with Object[] as value
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.
Solution 1:[1]
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.
Solution 2:[2]
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-Objectcall to the.valueproperty, which contains the array of[pscustomobject]instances you want to sort by their.Idproperty 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.valuereplaces the original array with a new, sorted array.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | codaamok |
| Solution 2 | mklement0 |
