这个powershell的东西
$Processes = get-process | Group-Object -Property ProcessName
foreach($Process in $Processes)
{
$Obj = New-Object psobject
$Obj | Add-Member -MemberType NoteProperty -Name Name -Value $Process.Name
$Obj | Add-Member -MemberType NoteProperty -Name Mem -Value ($Process.Group|Measure-Object WorkingSet -Sum).Sum
$Obj | sort Mem -Descending
}
输出与此相同的
$Processes = get-process | Group-Object -Property ProcessName
foreach($Process in $Processes)
{
$Obj = New-Object psobject
$Obj | Add-Member -MemberType NoteProperty -Name Name -Value $Process.Name
$Obj | Add-Member -MemberType NoteProperty -Name Mem -Value ($Process.Group|Measure-Object WorkingSet -Sum).Sum
$Obj
}
我不熟悉它是否真的有效但是因为这些项目是相加的,所以它是从第一个值开始排序的,但是因为它仍然按字母顺序排序我觉得它不是&#39 ; t设置为正确的值进行排序。我已经尝试了几种不同的组合
sort,sort-object,sort-object -property" Mem" -Scending,Mem," Mem",WS," WS",WorkingSet,@ {Expression =" Mem&#34 ;; Descending = $ true}和各种排列,
将生成的$ Obj抛给另一个已排序的$ Obj(它抛出一个错误,说它没有添加$ ObjS + = $ obj | sort等)其他几种调用对象排序的方法我没有&#39保存或记住。
并得出结论,我的错误可能源于其他地方,但因为没有错误被抛出我相信我的语法至少是正确的。
我希望输出按进程的内存使用情况排序(按相同名称组合以获得类似进程的总内存,
即所有的chromes只处理一个--chrome 1650453708 -
这也适用于Windows 7的任何功能,如果这有帮助的话
答案 0 :(得分:2)
这里有一个提示:你在这里排序什么?
foreach($Process in $Processes)
{
#...
$Obj | sort Mem -Descending
}
答案 1 :(得分:0)
构建数据集然后排序。
Function Get-ProcessMemorySummary1
{
$Processes = Get-Process | Group-Object -Property ProcessName
foreach($Process in $Processes)
{
$Obj = New-Object psobject
$Obj | Add-Member -MemberType NoteProperty -Name Name -Value $Process.Name
$Obj | Add-Member -MemberType NoteProperty -Name Mem -Value ($Process.Group `
| Measure-Object WorkingSet -Sum).Sum
$Obj | sort Mem -Descending
}
}
Get-ProcessMemorySummary1 | Sort-Object Mem
Function Get-ProcessMemorySummary2
{
$Processes = get-process | Group-Object -Property ProcessName
foreach($Process in $Processes)
{
$Obj = New-Object psobject
$Obj | Add-Member -MemberType NoteProperty -Name Name -Value $Process.Name
$Obj | Add-Member -MemberType NoteProperty -Name Mem -Value ($Process.Group `
| Measure-Object WorkingSet -Sum).Sum
$Obj
}
}
Get-ProcessMemorySummary2 | Sort-Object Mem
Name Mem
---- ---
Idle 8192
smss 1277952
NisSrv 1536000
ptim 1765376
ptsrv 1945600
ONENOTEM 3014656
rundll32 3084288
Secure System 3899392
ibtsiva 4325376
SynTPHelper 4648960
fdlauncher 5128192
ssh-agent 5353472
ibmpmsvc 5521408
fdhost 6725632
...
Get-ProcessMemorySummary2 | Sort-Object Mem -Descending
Name Mem
---- ---
iexplore 1890992128
svchost 1115009024
powershell_ise 834617344
RDCMan 734556160
sqlservr 698155008
Microsoft.Photos 396951552
dwm 346951680
MsMpEng 201469952
explorer 184778752
...
答案 2 :(得分:-1)
有人告诉我,使用Add-Member是一种资源匮乏。使用PSCustomObject为您提供可能更紧凑的代码,冗余更少,并允许轻松读取排序。
Get-Process | Group-Object -Property ProcessName | ForEach-Object {
[array]$objProcesses += [PSCustomObject][ordered] @{
Name = $_.Name
Mem = $(($_.Group | Measure-Object WorkingSet -Sum).Sum)
}
}
Return $objProcesses