Как отсортировать в Powershell объекты через Sort-Object


10 августа 2019


Сортировка в Powershell Sort-Object

Для сортировки в Powershell есть командлет Sort-Object. Мы можем отсортировать любой вывод команд, в том числе массивы, хэш таблицы и по датам. Каждый вариант мы рассмотрим на примерах.

По умолчанию командлет сортирует по возрастанию (ASC). На примере ниже я получил данные по отклику процессора:

Get-Process | Sort-Object -Property CPU

Powershell Sort-Object ASC

Ключ Property допускает использование нескольких значений.

Если нам нужно выполнить сортировку по убыванию (DESC), то для этого есть следующий ключ:

Get-Service | Sort-Object -Descending -Property "Name"

Сортировка по убыванию Powershell Sort-Object

Если у нас не указан ключ Descending, то у нас будет такая последовательность вывода: 

  1. Числа
  2. Буквы английского алфавита
  3. Буквы русского алфавита

 

Сортировка массивов и дат в Powershell Sort-Object

На самом деле любой объект сортируется аналогично предыдущим примерам. Если мы собираемся выполнить в Powershell сортировку по дате нужно убедиться, что нужное свойство имеет формат Datetime.

Get-ChildItem -File | Get-Member -MemberType "Property"
Get-ChildItem -File | Sort-Object -Property "LastWriteTime"

Сортировка по дате в Powershell

Бывает так, что дата формата INT (численный) или STR (строковый) и если вы не хотите сортировать как числа или строки, то их нужно преобразовать. Для примера так я отсортирую по типу данных datetime преобразовав число:

Get-ADComputer -Filter * -Properties lastLogon | Sort-Object {Get-Date $_.lastLogon}

Рекомендую почитать другие примеры работы с датой в Powershell.

Пример с сортировкой массива:

$a = 'z','s','f'
$a | Sort-Object -Descending

Хэш таблцицы сортируются так же.

 

Дополнительные параметры сортировки в Powershell

Хоть это и мало относится к сортировке, то у нас есть возможность получить уникальные значения в выводе:

Get-Service | Sort-Object -Unique Status

powershell sort-object unique

Для сортировки с учетом регистра букв есть ключ CaseSensitive, но он похоже не работает ( как минимум в PS 5.1 ). 

Другие примеры использования команд можно увидеть так:

Get-Help Sort-Object -Examples

Если нужно увидеть другие ключи:

Get-Command Sort-Object -Syntax

 

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.