系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

Sort-Object

按一个或多个属性排序对象,支持降序、去重和计算排序键。

补充说明

Sort-Object 接收管道对象,按 -Property 指定的属性排序并输出原对象;不指定属性时按对象自身值排序。别名是 sort。多个属性用数组,默认全部升序;需要对单个属性降序时用哈希表 @{Expression='Length';Descending=$true}。-Unique 在排序后去重,-CaseSensitive 改变字符串比较,-Culture 指定区域规则。

管道:按值接收对象,必须等全部输入到齐才能排序,因此是缓冲型命令。权限:本身不需要权限;能读取的属性取决于上游。边界:Sort-Object 排顺序,Group-Object 做分组,Select-Object -First 只截取;取 Top N 仍需先排序,大输入要评估内存。

版本:5.1 的排序默认受当前区域设置影响,相同键的元素不保证保持原顺序;7.x 差异:提供 -Stable 明确要求稳定排序,跨版本结果需要固定顺序时加显式次级排序键。

常用示例

# 1. 按内存降序,取占用最高的进程
PS C:\> Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 5 Name, Id

# 2. 多属性排序,先按状态再按显示名
PS C:\> Get-Service | Sort-Object Status, DisplayName | Select-Object Status, Name

# 3. 只对长度降序,再用名称升序作为次级键
PS C:\> Get-ChildItem C:\Logs -File | Sort-Object @{Expression='Length';Descending=$true}, Name

# 4. 排序后去重,适合清理重复的清单行
PS C:\> Get-Content C:\Data\names.txt | Sort-Object -Unique

# 5. 按计算出的键排序,例如目录名长度
PS C:\> Get-ChildItem C:\Apps -Directory | Sort-Object { $_.Name.Length }

# 6. 区分大小写排序,验证名称冲突
PS C:\> Get-Process | Sort-Object -Property Name -CaseSensitive | Select-Object -First 10 Name

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. 为什么端口号按默认排序会出现 80, 443, 8080 之外的奇怪顺序?
  2. -Unique 默认区分大小写吗?它比较的是什么?
  3. 5.1 中相同排序键的元素顺序可预测吗?怎样让结果稳定?
答案
  1. 属性可能是字符串,按字典序比较;应转成整数或用计算属性排序。
  2. 默认不区分大小写;比较的是所选属性组合(不指定属性时比较对象值)。
  3. 不保证;增加唯一次级排序键,或使用 7.x 的 -Stable。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令