#投影 Select-Object
Select-Object 用于从输入对象中选择属性、截取指定数量的对象、展开属性值,或通过计算属性创建新的对象。
#选择属性
使用 -Property 指定要保留的属性:
> Get-Process | Select-Object -Property ProcessName, Id, CPU
属性名支持通配符:
> Get-ChildItem | Select-Object -Property Name, Length
> Get-Process | Select-Object -Property *Path*
- 输出是只包含所选属性的新对象。
- 未选择的属性不会出现在结果中。
#截取对象
#-First 与 -Last
> Get-Process | Select-Object -First 5
> Get-Process | Select-Object -Last 5
#-Skip
跳过指定数量的对象:
> Get-Process | Select-Object -Skip 10
#-Unique
去除重复项:
> Get-ChildItem -File | Select-Object -Property Extension -Unique
#展开属性
-ExpandProperty 不只保留属性,而是直接返回属性值:
> Get-Process | Select-Object -ExpandProperty ProcessName
> Get-ChildItem | Select-Object -ExpandProperty Name
- 展开后得到的是字符串、数字等原始值,而不是带有属性的对象。
- 通常只展开一个属性;需要保留多个属性时使用
-Property。
#计算属性
使用哈希表定义计算属性,语法如下:
Select-Object -Property @{ Name = '名称'; Expression = { 表达式 } }
也可以使用简写 N 和 E:
> Get-Process | Select-Object -First 5 -Property ProcessName, @{ Name = 'MemMB'; Expression = { [math]::Round($_.WorkingSet64 / 1MB, 1) } }
在表达式中可以使用 $_ 引用当前对象:
> Get-ChildItem -File | Select-Object -Property Name, @{ Name = 'SizeKB'; Expression = { [math]::Round($_.Length / 1KB, 1) } }
#注意事项
-First、-Last、-Skip按输入顺序截取对象,适合快速查看数据。-ExpandProperty返回原始值,后续命令将按值的类型处理。- 计算属性中的表达式在每处理一个对象时执行一次。