PowerShell 5:如何通过管道直接获取Get-Measure的Count属性值
解决PowerShell 5中管道提取Measure-Object Count值的问题
要在PowerShell 5里仅通过管道操作、不使用括号直接获取Measure-Object的Count属性值(返回Int32类型而非PSCustomObject),最贴合需求的方法是使用Select-Object的-ExpandProperty参数——它专门用于直接提取对象的属性值,而非返回包含该属性的包装对象。
具体命令示例
统计PowerShell别名数量的正确写法:
Get-Alias | Measure-Object | Select-Object -ExpandProperty Count
你也可以用PowerShell的内置别名简化命令,写法更简洁:
alias | measure | select -Expand Count
为什么这个方法更合适?
- 对比
Select-Object -Property Count:后者会返回一个包含Count属性的PSCustomObject(输出类似@{Count=156}),而-ExpandProperty会直接提取属性的原始值(比如整数156),完全符合你需要的Int32类型结果。 - 对比
ForEach-Object { $_.Count }:虽然这个写法也能生效,但Select-Object -ExpandProperty的语义更明确——它就是为提取属性值设计的,而ForEach-Object是通用的循环处理命令,更适合批量处理多个对象的场景。不过需要说明的是,Measure-Object本身只会返回单个MeasureInfo对象,所以两种方法在结果上没有差异,但前者更贴合你的需求场景。
为什么你期望的alias | measure | $_.Count写法不生效?
PowerShell的管道后必须接命令,不能直接引用变量或属性表达式,所以$_.Count无法单独作为管道的下一个环节,必须通过Select-Object或ForEach-Object这类命令来处理管道传递的对象。
内容的提问来源于stack exchange,提问作者LosManos
相关产品推荐
相关产品推荐

