select-object -property 可筛选对象特定属性,支持通配符*查看全部属性、哈希表创建计算字段,并需配合sort-object时先排序后筛选以避免属性缺失错误。
直接用 -property 参数指定你要保留的属性名,就能筛选出对象中特定的字段,其他属性会被自动丢弃。
基础用法:只留需要的几个属性
最常用的方式是把命令输出通过管道传给 Select-Object -Property,后面跟上逗号分隔的属性名:
-
Get-Process | Select-Object -Property Name, Id, CPU—— 只显示进程名、ID 和 CPU 使用率 -
Get-Service | Select-Object -Property Name, Status, StartType—— 只保留服务名称、状态和启动类型
注意:属性名必须准确。如果不确定,先用 Get-Member 查看真实属性名,比如 Get-Process | Get-Member -MemberType Property。
显示所有属性(调试时很有用)
有时你不知道有哪些属性可用,或者想确认某个值是否存在:
-
Get-AzVM -Name TestVM | Select-Object -Property *—— 展开 Azure 虚拟机对象全部属性 -
Get-ChildItem | Select-Object -Property *—— 查看文件对象所有字段(含隐藏属性如VersionInfo)
这个操作会输出大量信息,适合一次性检查,不建议在脚本中长期使用。
用计算属性生成新字段
你可以用哈希表语法动态创建新属性,比如单位换算、拼接字符串或条件判断:
Get-CimInstance Win32_LogicalDisk | Select-Object Name, @{Label='FreeGB'; Expression={[math]::Round($_.FreeSpace/1GB, 2)}}-
Get-ADUser -Filter * | Select-Object Name, @{n='UPN'; e={$_.UserPrincipalName}}(n是Name的简写,e是Expression的简写)
其中 Label(或 Name)定义列标题,Expression 是一个脚本块,$_ 指当前对象。
组合筛选与排序更实用
Select-Object 本身不排序,但常和 Sort-Object 配合使用。关键顺序是:先排序,再选属性:
-
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 -Property Name, CPU—— 取 CPU 占用最高的前 5 个进程,并只显示两列 -
Get-Service | Sort-Object Status, Name | Select-Object -Property Name, Status—— 先按状态再按名称排序,再精简输出
如果反过来(先 Select-Object 再 Sort-Object),可能因属性被提前删掉而报错,比如你删了 Status 却还想按它排序。











