Select-Object 是什么
Select-Object 做两件事:一是投影属性,从对象里挑出需要的列,丢掉其余部分;二是截取切片,取前 N 条、后 N 条或跳过前面若干条。它还能用哈希表语法生成计算列,把字节数换算成兆字节、把时间格式化,或者干脆给列起一个中文名。整理输出、做 Top N 排行、为导出 CSV 准备字段,都靠它完成。需要注意的是它只处理对象本身,不改变上游取数的范围,所以放在管道的哪个位置会影响性能。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 语法 | Select-Object [-Property] <属性列表> [-First n] [-Last n] [-Skip n] [-Unique] [-ExpandProperty 属性] |
| 计算列语法 | @{Name='列名'; Expression={ 表达式 }},Name 可简写 n,Expression 可简写 e |
| 常用切片 | -First 取前 n 条、-Last 取末尾、-Skip 跳过前若干条、-SkipLast 跳过末尾 |
| -ExpandProperty | 展开单个属性并去掉外层对象,适合只想要值列表的场景 |
| 组合 | 常接在 Sort-Object 之后做 Top N,或接在 Where-Object 之后做字段裁剪 |
典型使用场景
- 进程资源排行:先排序再取前 10 条,只保留名称与占用字段
- 目录清单整理:把字节数换算成兆字节,便于人工快速判断量级
- 导出报表:先裁字段再导出 CSV,避免把几十个无用列写入文件
- 批量取值:用展开参数把某个属性抽成一串纯值,交给循环处理
- 抽样查看:只看前几条确认数据形态,避免刷屏
- 去重展示:用唯一参数按关键字段去重,观察有哪些不同取值
常用示例
常用示例
# 取前 5 个进程的名称、编号与累计 CPU
Get-Process | Select-Object -First 5 Name, Id, CPU
# 计算列:换算成 MB 并保留两位小数
Get-ChildItem C:\Logs -File | Select-Object Name, @{n='MB';e={[math]::Round($_.Length/1MB,2)}}
# Top N:先排序再截取
Get-Process | Sort-Object WS -Descending | Select-Object -First 10 @{n='进程';e={$_.ProcessName}}, @{n='内存MB';e={[math]::Round($_.WS/1MB)}}
# 只要值,不要外层对象
Get-ChildItem C:\Windows -File | Select-Object -ExpandProperty Name
# 去重观察有哪些启动类型
Get-Service | Select-Object -Property StartType -Unique常用参数速查
| 参数 | 作用 | 注意点 |
|---|---|---|
| -Property | 指定要保留的属性列 | 写不存在的属性名会得到一列空值 |
| -First n | 取最前面 n 条 | 会提前终止上游管道,大吞吐场景下会出现管道停止提示 |
| -Last n | 取最后 n 条 | 需要上游全部产完,内存占用随数据量增长 |
| -Skip n | 跳过前 n 条 | 常与 -First 搭配做分页 |
| -Unique | 按比较结果去重 | 只比较选定属性,不是整对象去重 |
| -ExpandProperty | 展开单个属性取值 | 与 -Property 同时使用会互相干扰,需二选一 |
计算列在导出 CSV 时同样会保留,所以「先算好人类可读的列再导出」是常见做法;但中文列名在不同系统之间传递时可能乱码,做系统间交换建议保留英文列名。
只做纯取值与换算时,Select-Object 比 ForEach-Object 更轻,因为它不需要为每条记录执行完整的脚本块;需要副作用(调用方法、写文件)时才交给 ForEach-Object。
计算列里的表达式必须用 $_ 指代当前对象,并且整段要包在花括号中;如果只是想改个列名,也可以写成「新名 = 旧名」的哈希表形式,不必写完整表达式。
与其他环节的配合
- 接在 Where-Object 之后裁字段,先筛后选能减少投影的对象数量
- 接在 Sort-Object 之后取头部,构成 Top N 的标准写法
- 接在 Get-ChildItem 之后做单位换算,让输出更容易读懂
- 作为 Export-Csv 的上一步,先把列定好再落盘
- 与 Group-Object 搭配时先精简字段,分组统计的中间对象会更小
计算属性的常见换算
- 内存与磁盘:字节除以 1KB、1MB、1GB,再取整保留小数
- 时间:把日期时间对象按需要的格式转成字符串输出
- 比值:用两个属性相除,得到使用率或占比类指标
- 分类:用条件表达式把数值映射成达标、超标等文字标签