Поделиться через


Sort-Object

Сортирует объекты по значениям свойств.

Синтаксис

Sort-Object [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-Descending] [-InputObject <psobject>] [-Unique] [<CommonParameters>]

Описание

Командлет Sort-Object сортирует объекты по возрастанию или по убыванию на основе значений свойств объектов.

Можно задать одно свойство или несколько свойств (сортировка по нескольким ключам), а также выбрать сортировку с учетом или без учета регистра. Кроме того, можно сделать так, чтобы командлет Sort-Object выводил только объекты с уникальными значениями того или иного свойства.

Параметры

-CaseSensitive

Указывает, что сортировка должна выполняться с учетом регистра. По умолчанию сортировка выполняется без учета регистра.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Culture <string>

Указывает используемую при сортировке настройку культуры.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Descending

Сортирует объекты в порядке убывания. По умолчанию используется сортировка в порядке возрастания.

Действие параметра Descending распространяется на все свойства. Чтобы выполнить сортировку по некоторым свойствам в порядке возрастания значений, а по другим свойствам — в порядке убывания, значения этих свойств нужно задать с использованием хэш-таблицы. Подробности см. в примерах.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-InputObject <psobject>

Задает объекты для сортировки.

Если для передачи коллекции объектов используется параметр InputObject, командлет Sort-Object получает один объект, представляющий коллекцию. Поскольку один объект отсортировать невозможно, Sort-Object возвращает всю коллекцию без изменений.

Чтобы отсортировать объекты, передайте их командлету Sort-Object по конвейеру.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByValue)

Принимать подстановочные знаки?

false

-Property <Object[]>

Задает свойства для использования при сортировке. Объекты сортируются на основании значений этих свойств. Введите имена свойств. Подстановочные знаки разрешены.

Если указано несколько свойств, объекты сначала сортируются по первому свойству. Если у нескольких объектов значения первого свойства совпадают, эти объекты сортируются по второму свойству. Это продолжается до тех пор, пока не закончатся все указанные свойства или группы объектов.

Если свойства не указаны, командлет выполняет сортировку на основании свойств по умолчанию для объектов данного типа.

Значение параметра Property может быть новым вычисляемым свойством. Чтобы создать вычисляемое свойство, используйте хэш-таблицу. Допустимые ключи:

-- Expression <строка> или <блок скрипта>

-- Ascending <Boolean>

-- Descending <Boolean>

Обязательно?

false

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

true

-Unique

Удаляет дубликаты и возвращает только уникальные элементы коллекции. Этот параметр можно использовать вместо командлета Get-Unique.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

Входные данные

System.Management.Automation.PSObject

Объекты для сортировки можно передать командлету Sort-Object по конвейеру.

Выходные данные

System.Management.Automation.PSObject

Командлет Sort-Object возвращает отсортированные объекты.

Примечания

Командлет Sort-Object сортирует объекты на основании заданных свойств или свойств сортировки по умолчанию для объектов данного типа.

Если объект не имеет одного из указанных свойств, соответствующее значение свойства интерпретируется командлетом как NULL, и объект помещается в конец списка сортировки.

При сортировке объектов командлет Sort-Object использует для каждого свойства метод Compare. Если интерфейс IComparable в свойстве не реализован, то этот командлет преобразует значение свойства в строку и вызывает метод Compare класса System.String.

Командлет Sort-Object сортирует объекты по возрастанию или по убыванию на основе значений свойств объектов.

При сортировке по свойству, значения которого являются перечислением, командлет Sort-Object сортирует значения по их числовым эквивалентам, а не по именам элементов перечисления. Например, при сортировке служб по состоянию службы с состоянием "Остановлена" будут отображаться до служб с состоянием "Работает", поскольку значение свойства Status является перечислением ServiceControllerStatus, в котором элементу "Stopped" соответствует значение 1, а элементу "Running" — значение 4.

Пример 1

C:\PS>get-childitem | sort-object 

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         9/13/2005   4:24 PM          0 0
-a---          9/6/2005   4:19 PM         12 a.csv
-a---         9/21/2005   3:49 PM        529 a.Ps
-a---         8/22/2005   4:14 PM         22 a.pl
-a---         9/27/2005  10:33 AM         24 a.txt
-a---         9/15/2005  10:31 AM        398 a.vbs
-a---         7/21/2005  12:39 PM      37066 a.xml
-a---         8/28/2005  11:30 PM       5412 a.xslt
-a---        10/25/2005   1:59 PM        125 AdamTravel.txt
-a---         7/21/2005   9:49 AM         59 add2Num.Ps
-a---         8/29/2005   5:42 PM       7111 add-content.xml
-a---         9/21/2005  12:46 PM       8771 aliens.Ps
-a---         8/10/2005   2:10 PM        798 array.xml
-a---          8/4/2004   5:00 AM        110 AUTORUN.INF
-a---          9/6/2005   4:20 PM        245 b.csv
...

Описание
-----------
Эта команда сортирует вложенные каталоги и файлы из текущего каталога. Поскольку ни одно свойство не задано, файлы и каталоги отсортированы по алфавиту по свойству по умолчанию (Name).





Пример 2

C:\PS>get-childitem | sort-object -property length 

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         12/3/2006   5:35 PM          2 pref.txt
-a---          9/6/2006   3:33 PM         15 count.txt
-a---         7/26/2006  10:01 AM         30 filenoext
-a---         8/18/2006   9:02 AM         52 temp.ps1
-a---         8/18/2006   9:02 AM         52 temp.msh
-a---          9/6/2006   3:33 PM         56 fivewords.txt
-a---         7/26/2006   9:28 AM         80 date.csv
-a---         7/29/2006   7:15 PM         84 test2.txt
-a---         7/29/2006   7:15 PM         84 test.ps1

Описание
-----------
Эта команда отображает имеющиеся в текущем каталоге файлы, сортируя их по возрастанию размера.





Пример 3

C:\PS>get-process | sort-object -property WS | select-object -last 5 

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
   1105      25    44236      18932   197    93.81   2032 iexplore
   2526      66    37668      36836   221   393.27    868 svchost
    974      19    22844      45928   371    88.39   3952 WINWORD
   1371      22    42192      61872   323    75.75   1584 INFOPATH
   2145      58    93088      70680   619   396.69   3908 OUTLOOK

Описание
-----------
Эта команда отображает пять процессов, которые используют наибольший объем памяти на основании их рабочих наборов. 

С помощью командлета Get-Process команда получает список выполняющихся на компьютере процессов. С помощью оператора конвейера (|) она передает результаты командлету Sort-Object, который сортирует объекты в порядке размеров рабочих наборов. 

Другой оператор конвейера передает результаты командлету Select-Object, который отображает только пять элементов списка.





Пример 4

C:\PS>get-history | sort-object -descending 

Id CommandLine
-- -----------
51 get-history | sort -descending
50 get-history | sort -descending
49 get-history | sort -descending
48 get-history | sort -descending
47 get-history | sort -descending
46 get-history | sort -descending
45 get-history | sort -descending
44 cd $pshome
43 get-childitem | sort-object
42 gci *.txt

Описание
-----------
Эта команда сортирует объекты HistoryInfo, используя в качестве ключа по умолчанию свойство Id.





Пример 5

C:\PS>C:\PS> get-service | sort-object -property `
@{Expression="Status";Descending=$true}, `
@{Expression="DisplayName";Descending=$false} 

Status   Name               DisplayName
------   ----               -----------
Running  ALG                Application Layer Gateway Service
Running  Ati HotKey Poller  Ati HotKey Poller
Running  wuauserv           Automatic Updates
Running  BITS               Background Intelligent Transfer Ser...
Running  Client for NFS     Client for NFS
...
Stopped  clr_optimizatio... .NET Runtime Optimization Service v...
Stopped  Alerter            Alerter
Stopped  AppMgmt            Application Management
Stopped  aspnet_state       ASP.NET State Service
Stopped  ATI Smart          ATI Smart
Stopped  ClipSrv            ClipBook

Описание
-----------
Эта команда отображает службы компьютера в порядке убывания значения Status и возрастания значения DisplayName.

Эта команда с помощью командлета Get-Service получает службы на компьютере. Службы с помощью оператора конвейера (|) передаются командлету Sort-Object.

Чтобы выполнить сортировку по возрастанию одного свойства и убыванию другого, в этой команде используется хэш-таблица для значения свойства Property. Хэш-таблица использует ключ Expression, чтобы задать имя свойства, и ключ Ascending или Descending, чтобы определить порядок сортировки.

В результатах выполнения команды, выполняющей сортировку по убыванию значения Status, объекты, для которых свойство Status имеет значение "Running" (Работает), будут отображаться до объектов, для которых свойство Status имеет значение "Stopped" (Остановлена). При сортировке по возрастанию значения "Stopped" отображаются до значений "Running", потому что значениями свойства Status являются элементы перечисления, в котором значение "Stopped" (1) меньше, чем "Running" (4).





Пример 6

C:\PS>get-childitem *.txt | sort-object -property @{Expression={$_.LastWriteTime - $_.CreationTime}; Ascending=$false} | Format-Table LastWriteTime, CreationTime 

LastWriteTime                           CreationTime
-------------                           ------------
2/21/2006 10:22:20 AM                   10/3/2005 4:19:40 PM
2/27/2006 8:14:24 AM                    2/23/2006 10:41:08 PM
2/24/2006 1:26:19 PM                    2/23/2006 11:23:36 PM
1/5/2006 12:01:35 PM                    1/5/2006 11:35:30 AM
2/24/2006 9:25:40 AM                    2/24/2006 9:22:24 AM
2/24/2006 9:40:01 AM                    2/24/2006 9:39:41 AM
2/21/2006 10:21:30 AM                   2/21/2006 10:21:30 AM

Описание
-----------
Эта команда сортирует текстовые файлы по возрастанию, используя в качестве критерия сортировки интервал между временем создания файла (CreationTime) и временем последней записи (LastWriteTime).





Пример 7

C:\PS>get-content servers.txt

localhost
test01
server01
server02
localhost
server01

C:\PS> get-content servers.txt | sort-object -unique
localhost
server01
server02
test01

Описание
-----------
Эти команды сортируют имена серверов в текстовом файле. Вторая команда с помощью командлета Sort-Object с параметром Unique возвращает отсортированный список без дубликатов.





См. также

Концепции

Group-Object