Как отсортировать массив объектов по одному из значений их свойств в Powershell? - PullRequest
1 голос
/ 03 августа 2020

Например, у меня есть переменная, которая возвращает строку с несколькими массивами:

@{sourceDSAcn=B; LastSyncResult=0} @{sourceDSAcn=A; LastSyncResult=9} @{sourceDSAcn=C; LastSyncResult=0} @{sourceDSAcn=M; Last SyncResult=10}

Я хочу отсортировать эту строку в алфавитном порядке по одному из параметров. В данном случае - от sourceDSAcn , поэтому результат должен быть таким:

@{sourceDSAcn=A; LastSyncResult=9} @{sourceDSAcn=B; LastSyncResult=0} @{sourceDSAcn=C; LastSyncResult=0} @{sourceDSAcn=M; Last SyncResult=10}

Как я могу это сделать?

1 Ответ

0 голосов
/ 04 августа 2020

Ваш выходной формат предполагает две вещи:

  • Объекты не массивы , а настраиваемые объекты ([pscustomobject] экземпляров) .

  • Вы использовали команду Write-Host для печати этих объектов на хосте (отображении), что привело к хэш-таблице-литералу- например, представление, показанное в вашем вопросе (см. этот ответ ).

    • Если вместо этого вам нужно обычное форматирование с расширенным отображением, которое вы получаете по умолчанию - при отправке выводить только на хост , а не на поток вывода - вы можете использовать командлет Out-Host.
    • И наоборот, для создания данные вывод в конвейер , используйте либо командлет Write-Output, либо, желательно, функцию неявного вывода PowerShell, как показано ниже; для получения дополнительной информации см. этот ответ .

Чтобы отсортировать (настраиваемые) объекты по заданному свойству , просто передайте имя этого свойства для Sort-Object (позиционно подразумевается) -Property параметр, как Матиас Р. Джессен услужливо предлагает:

# Using $variable by itself implicitly sends its value through the pipeline.
# It is equivalent to: Write-Output $variable | ...
$variable | Sort-Object sourceDSAcn # same as: ... | Sort-Object -Property sourceDSAcn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...