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заменяет исходный массив новым отсортированным массивом.

Другие вопросы по тегам