如果我在 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}
是的,使用选择对象:
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 }}
只需使用括号将管道命令括起来:
(get-process chrome | measure-object WorkingSet -sum).sum
通常,PowerShell 将括号中的任何内容视为可以通过属性/方法引用的对象。
另一种方式:
(get-process chrome | measure-object WorkingSet -sum).sum
管道确实非常适合在交互式 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