select-object 核心作用是“选列”或“选行”,用于控制输出结构:通过 -property 选属性、-first/-last/-skip 控制行数、-index 精确索引、-unique 去重、-expandproperty 展开集合,不进行内容过滤。
在 powershell 基础中,select-object 是最常用的数据筛选命令之一,核心作用是“选列”或“选行”——不是过滤内容(那是 where-object 的事),而是控制输出结构:保留哪些属性、取前几条、跳过几条、去重、或按索引提取。
用 Property 参数选字段(最常见)
多数时候你只想看对象的几个关键属性,比如查进程时不需要全部 50+ 个属性,只关心名字、ID 和内存占用:
Get-Process | Select-Object -Property Name, Id, WS- 支持通配符:
Get-Service | Select-Object Status, DisplayName, Can*(匹配CanPauseAndContinue、CanShutdown等) - 支持别名写法:
Get-Process | Select Name, Id, WorkingSet(WS是WorkingSet的别名) - 可加计算属性,例如添加一列显示内存 MB:
@{Name='MemMB';Expression={[math]::Round($_.WS/1MB, 2)}}
用 First/Last/Skip 控制行数
快速获取样本或排除开头/结尾干扰项:
-
Get-ChildItem | Select-Object -First 5→ 只显示前 5 个文件 -
Get-EventLog -LogName System -Newest 100 | Select-Object -Last 10→ 取最近 10 条日志 -
Get-Process | Select-Object -Skip 3→ 跳过前 3 个进程,从第 4 个开始输出 -
-SkipLast 2表示去掉最后 2 条(PowerShell 5.1+ 支持)
用 Index/SkipIndex 精确取指定位置
适合已知索引的场景,比如取第 1、3、7 条:
-
Get-Process | Select-Object -Index 0,2,6(索引从 0 开始) -
Get-Service | Select-Object -SkipIndex 0,1→ 排除第 0 和第 1 条记录 - 注意:
-Index和-SkipIndex不能和-First/-Last混用
其他实用技巧
提升可读性和实用性的小细节:
- 去重:
Get-Process | Select-Object -Property Name -Unique→ 列出所有唯一进程名 - 排除字段:
Get-Service | Select-Object * -ExcludeProperty Status, StartType - 展开属性:
Get-Process | Select-Object -ExpandProperty Modules→ 把模块集合“摊开”成多行对象 - 配合
Format-Table更美观:... | Select-Object Name, CPU | Format-Table -AutoSize











