如何使用PowerShell计算和使用单个进程的多个实例的内存?

时间:2013-08-27 11:08:45

标签: windows powershell powershell-v2.0 windows-server-2008-r2

我在powershell命令下运行时有以下结果,

PS C:\> Get-Process svchost

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    546      34    18528      14884   136    49.76    260 svchost
    357      14     4856       4396    47    18.05    600 svchost
    314      17     6088       5388    42    12.62    676 svchost
    329      17    10044       8780    50    12.98    764 svchost
   1515      49    36104      38980   454   232.04    812 svchost
    301      33     9736       6428    54     2.90    832 svchost
    328      26     8844       9744    52     4.32    856 svchost
    247      18     8144       9912    77    37.50    904 svchost
     46       5     1504        968    14     0.02   1512 svchost
    278      15     4048       5660    43     3.88   2148 svchost
     98      14     2536       2460    35     0.66   2504 svchost

这里我试图计算进程的总内存大小PM(K)。我在ps1脚本文件中有以下行

get-process svchost | foreach {$mem=("{0:N2}MB " -f ($_.pm/1mb))}

它以下列格式提供输出

17.58MB 4.79MB 6.05MB 9.99MB 35.29MB 9.56MB 8.64MB 7.95MB 1.47MB 3.95MB 2.48MB

但我需要将总大小作为单个值,例如107.75MB

如何计算svchost进程的总使用内存大小?

由于

2 个答案:

答案 0 :(得分:10)

您可以使用Measure-Object cmdlet

$measure = Get-Process svchost | Measure-Object PM -Sum
$mem = ("{0:N2}MB " -f ($measure.sum / 1mb))

答案 1 :(得分:1)

此外,您可以使用+ =语法

计算整个集合的总大小
$mem = 0
Get-Process svchost | %{$mem += $_.pm}
"{0:N2}MB " -f ($mem/1mb)