Powershell Sort-Object PSCustomObject с Object[] в качестве значения
Я использую доступ RestAPI к Azure. Я получаю список наборов изменений для идентификатора сборки.
Я хотел бы отсортировать тип объекта по возрастанию номера набора изменений.
Тип, который я получаю для
$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
Я бы хотел сохранить структуру такой, какая она есть, чтобы ничего не сломать. Компонент имеет множество свойств.
2 ответа
Без примера рабочего набора данных сложно создать абсолютно рабочее решение для вашего варианта использования, однако вы можете отсортировать данные, используя приведенное ниже:
$changeset | Select-Object -ExpandProperty value | Sort-Object -Property id
Это вернет все объекты под непосредственным свойством
value
и отсортированы по свойству
id
.
Если вы хотите сохранить объект в целом с его нынешней структурой:
$changeset.value = @($changeset.value | Sort-Object -Descending -Property Id)
То есть:
Вы должны применить
Sort-Object
звонок в.value
свойство, которое содержит массив[pscustomobject]
экземпляры, которые вы хотите отсортировать по их.Id
значения свойств.Заключение команды в
@(...)
, оператор подвыражения массива , гарантирует, что объекты сортировки обрабатываются как массив, даже если ситуативно может присутствовать только один объект.Присвоение результатов обратно
$changeset.value
заменяет исходный массив новым отсортированным массивом.