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 возвращает отсортированный список без дубликатов.