Sort-Object
按属性值对对象进行排序。
语法
Sort-Object [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-Descending] [-InputObject <psobject>] [-Unique] [<CommonParameters>]
说明
Sort-Object cmdlet 根据对象的属性值按升序或降序对对象排序。
您可以指定一个属性或多个属性(用于多键排序),也可以选择区分大小写或不区分大小写的排序。您还可以指示 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[]>
指定排序时要使用的属性。对象将基于这些属性的值进行排序。输入属性的名称。允许使用通配符。
如果您指定多个属性,则先按第一个属性对对象进行排序。如果多个对象的第一个属性的值相同,则按第二个属性对这些对象排序。此过程将一直继续,直至没有其他指定的属性或没有对象组。
如果您未指定属性,cmdlet 会根据对象类型的默认属性进行排序。
Property 参数的值可以是新的计算属性。若要创建计算属性,请使用哈希表。有效键包括:
-- Expression <字符串> 或 <脚本块>
-- Ascending <布尔值>
-- Descending <布尔值>
是否为必需? |
false |
位置? |
1 |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
true |
-Unique
消除重复项,只返回集合的唯一成员。您可以使用此参数来代替 Get-Unique cmdlet。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
System.Management.Automation.PSObject 可以通过管道将要排序的对象传递给 Sort-Object。 |
输出 |
System.Management.Automation.PSObject Sort-Object 返回排序后的对象。 |
说明
Sort-Object 会根据您指定的属性或该类型对象的默认排序属性对对象进行排序。
如果某个对象不具有所指定的属性之一,则 cmdlet 会将该对象的属性值解释为 NULL,并将其放置在排序顺序的末尾。
在对对象进行排序时,Sort-Object 会对每个属性使用 Compare 方法。如果某个属性未实现 IComparable,则 cmdlet 会将属性值转换为字符串并使用 System.String 的 Compare 方法。
Sort-Object cmdlet 根据对象的属性值按升序或降序对对象排序。
如果您根据其值是枚举的属性排序,Sort-Object 会按数字顺序对枚举值排序,它不会对枚举成员名称排序。例如,如果您按状态对服务排序,则状态为“Stopped”的服务会出现在状态为“Running”的服务之前,因为状态值是一个 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 cmdlet 获取进程列表。它使用管道运算符 (|) 将结果发送到 Sort-Object cmdlet,该 cmdlet 会按工作集顺序对对象进行排序。
另一个管道运算符会将结果发送到 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
说明
-----------
此命令使用 ID 属性作为默认关键字对 HistoryInfo 对象进行排序。
示例 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 cmdlet 获取计算机上的服务。它使用管道运算符 (|) 将服务发送到 Sort-Object cmdlet。
为了按升序对一个属性排序,按降序对另一个属性排序,此命令需要对 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 cmdlet 与 Unique 参数结合使用,以返回一个已排序且无重复项的列表。