问题描述
我正在努力将Powershell选项结合起来,以便生成一个简单的表,列出系统(服务器,个人计算机等)上的前10名内存用户。我的PC是Windows 7,由于Covid 19而没有现场时间表来升级到Windows10。我无法将应用程序添加到未经过审核过程的应用PC中(阅读,这需要花费很多时间),因此我大部分时间都在创建我自己的。
我想产生一个看起来像这样的结果:
以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'