如何在 PowerShell 中仅返回 Measure-Object 的整数和?

问题描述 投票:0回答:4

如果我在 PowerShell 中运行以下命令,它将返回一个包含 WorkSet 属性总和的对象:

PS > get-process chrome | measure-object WorkingSet -sum

Count    : 36
Average  :
Sum      : 2377129984
Maximum  :
Minimum  :
Property : WorkingSet

如果我只想返回

Sum
值,我发现的唯一方法是:

PS > $a = get-process chrome | measure-object WorkingSet -sum
PS > $a.Sum
2359980032

有没有办法将原始命令通过管道传递给其他命令,以便我一步返回整数?像这样的东西:

PS > get-process chrome | measure-object WorkingSet -sum | {some other command}
powershell
4个回答
18
投票

是的,使用选择对象

Get-Process chrome | Measure-Object WorkingSet -sum | Select-Object -expand Sum

当只需要原始对象的某些属性时,可以使用 Select-Object。它创建一个新对象并将所需的属性复制到新对象。

Get-Process | Select-Object -property ProcessName, Handles

如果您需要(从一个属性)提取值,请使用参数

-expandProperty
而不是
-property
:

Get-Process | Select-Object -expand ProcessName

请注意,您可以计算返回值:

get-process | Select-Object -property @{Name='descr'; Expression={"{0} - {1}" -f $_.ProcessName, $_.Handles }}

13
投票

只需使用括号将管道命令括起来:

(get-process chrome | measure-object WorkingSet -sum).sum

通常,PowerShell 将括号中的任何内容视为可以通过属性/方法引用的对象。


5
投票

另一种方式:

(get-process chrome | measure-object WorkingSet -sum).sum

0
投票

管道确实非常适合在交互式 shell 中使用,因为它们允许您转换以前的输出,而无需编辑已输入命令的开头。

@Stej 的答案的一个紧凑替代方案是使用

ForEach-Object
的别名
%
,而不是
Select-Object -Expand

Get-Process chrome | Measure-Object WorkingSet -Sum | % Sum
即使管道中只有一个对象(由

ForEach-Object

 返回的 
MeasureInfo
 对象),
Measure-Object
也能工作。

如果您可以添加更多别名,请尝试以下操作:

gps chrome | measure -s WorkingSet | % Sum
© www.soinside.com 2019 - 2024. All rights reserved.