sort-object 核心是按对象属性排序,需先用 get-member 查属性;支持单/多属性、升降序组合、哈希表精细控制,并强调筛选前置、-top/-bottom 限数及 -unique 去重。
powershell 中用 sort-object 对管道对象排序,核心是明确“按什么属性排”和“怎么排”。它不处理原始文本,而是对上一个命令输出的对象属性进行排序,所以得先确认对象有哪些可用属性。
确认对象属性再排序
很多初学者直接写 Sort-Object Name 却报错或结果不对,往往是因为对象根本没有叫 Name 的属性,或者名称不匹配。正确做法是先用 Get-Member 查看结构:
-
Get-ChildItem | Get-Member—— 看文件/目录对象有哪些属性(如Name、LastWriteTime、Length) -
Get-Process | Get-Member—— 看进程对象属性(注意:CPU列实际对应属性名就是CPU,不是别名)
基础单属性排序
默认升序,加 -Descending 变降序:
-
Get-ChildItem | Sort-Object Name—— 按文件名升序排列 -
Get-Process | Sort-Object CPU -Descending—— 按 CPU 占用从高到低排 -
Get-ChildItem | Sort-Object Length -Descending—— 文件按大小从大到小排
多属性组合排序
多个属性按先后顺序生效:先按第一属性分组,组内再按第二属性排。支持混合升降序:
-
Get-ChildItem | Sort-Object LastWriteTime, Name—— 先按修改时间升序,时间相同时再按名称升序 -
Get-ChildItem | Sort-Object LastWriteTime -Descending, Name—— 修改时间降序,同时间下名称升序 - 用哈希表精细控制:
Sort-Object @{Expression='LastWriteTime'; Descending=$true}, @{Expression='Name'; Ascending=$true}
实用技巧与避坑点
排序只是中间环节,常配合其他命令使用,注意顺序和性能:
- 筛选尽量放前面:
Get-ChildItem -File | Sort-Object Length -Descending比Get-ChildItem | Where-Object {!$_.PSIsContainer} | Sort-Object Length -Descending更快 - 只显示需要的列:排序后用
Select-Object提取字段,比如| Sort-Object Length -Descending | Select-Object Name, Length, LastWriteTime - 去重加
-Unique:如Get-Service | Sort-Object Status -Unique只输出唯一的状态值 - 限制数量:想看最大的几个?用
-Top 5或-Bottom 3,比Select-Object -First 5更高效(Sort-Object 内置支持)











