如何使用powershell对进程名称进行分组并显示所用内存的总和

如何使用powershell对进程名称进行分组并显示所用内存的总和,powershell,windows-7-x64,Powershell,Windows 7 X64,我正试图将powershell选项组合在一起,以便生成一个简单的表,列出我的系统(服务器、pc等)上的前10位内存用户。我的电脑是Windows 7,由于新冠病毒19,网站上没有升级到Windows 10的时间表。我不能在我的工作电脑上添加没有经过审查的应用程序(阅读,这需要永远),所以大部分时间我都会创建自己的应用程序 我想产生一个类似这样的结果: 计数名称内存总和(MB) 10 Firefox 5000 3 javaw 1000 我希望能够通过更改powershell选项中的属性来选择的顺

我正试图将powershell选项组合在一起,以便生成一个简单的表,列出我的系统(服务器、pc等)上的前10位内存用户。我的电脑是Windows 7,由于新冠病毒19,网站上没有升级到Windows 10的时间表。我不能在我的工作电脑上添加没有经过审查的应用程序(阅读,这需要永远),所以大部分时间我都会创建自己的应用程序

我想产生一个类似这样的结果:

计数名称内存总和(MB)


10 Firefox 5000 3 javaw 1000

我希望能够通过更改powershell选项中的属性来选择的顺序。例如,按计数、名称或内存排序。我的样品台不是一成不变的

我遇到了下面两个powershell,一直在尝试对它们进行调整,但都出现了错误

(Get-Process | Measure-Object WorkingSet -sum).sum /1gb

 Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
为了便于学习,我不介意看到“丑陋”版本和优化版本。

您可以使用:

$proc=ps|select -eXp name;$proc2=@()
$proc|%{
if(!("$($_)" -in $proc2)){$proc2+="$($_)"
$mem=0;ps $_|select -eXp workingSet|%{$mem+=$_/1MB}
[pscustomobject][ordered]@{
'Count'=(ps $_ -ea silentlyContinue).Count
'Name'=$_
'Memory in MB'=$mem
}}}

PowerShell v3中引入了
PSCustomObject
加速器,因此我不知道输出是否与Windows 7中的表相似,但即使在PowerShell v2中,以下管道也会返回所需的属性:

Get-Process |
  Group-Object -Property Name -NoElement |
    Where-Object { $_.Count -gt 1 } |
      ForEach-Object {
        [PSCustomObject]@{
            Count= $_.Count
            Name = $_.Name
            'Memory Sum in MB' = [math]::Round(( Get-Process -Name $_.Name |
                Measure-Object WorkingSet -sum).sum /1Mb, 3)
        }
      }    # | Sort-Object -Property 'Memory Sum in MB'

我能告诉你扩展别名和简写名字吗?因为在任何给定的配置文件中,别名并不总是相同的(甚至不存在)。。。除了一次性的、一次性的使用之外,它们是一个坏主意。另外,他们在教学方面真的很差。。。[露齿而笑]@Lee_Dailey他们看起来有点古怪,也很节省时间。。。谢谢你的指点,这对新手来说不太好!这将使事情更容易阅读。。。[咧嘴笑]我得好好考虑一下。。我看到了我还没有见过的技术。运行它会产生我询问的结果。如果有什么不同的话,我希望RAM结果的小数位数更少,并且只限于前10位左右的内存用户。谢谢你给我一个学习挑战@Wasif。。。[微笑]@gritts欢迎。如果这对你有用,那就把它当作答案吧。谢谢你,JosefZ…我喜欢结果的显示方式。我认识你在这里使用的大部分东西。我想如果我想报告其他物业,我可以接受这一点并进一步调整。星期一上班时,我必须在我的Windows7系统上进行测试。