这个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
}
我还不够精通,不知道它是否真的有效,但因为项目是相加的,所以它是从第一个值开始排序的,但是因为它仍然是按字母顺序排序的,所以我认为它没有设置为正确的值来排序。我尝试了几种不同的组合
sort,sort-object,sort-object -property "Mem“-Descending,Mem,"Mem",WS,"WS",WorkingSet,@{Expression="Mem";Descending=$true}和各种排列,
将生成的$Obj抛给另一个已排序的$obj (抛出一个错误,指出它没有添加$ObjS、+=、$obj |sort等),还有一些我没有保存或记住的调用对象排序的其他方法。
并得出结论,我的错误可能源于其他地方,但是,由于没有抛出错误,我相信我的语法至少是正确的。
我希望输出按进程的内存使用情况排序(按相同的名称组合,以获得相似进程的总内存,
即所有的铬处理为一个-铬1650453708--
此外,这是在任何powershell上的windows7,如果这有任何帮助。
发布于 2018-02-06 02:45:21
构建数据集,然后进行排序。
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
...
发布于 2018-02-06 00:12:20
这里有一个提示:您在这里排序的是什么?
foreach($Process in $Processes)
{
#...
$Obj | sort Mem -Descending
}
发布于 2018-02-06 02:17:59
前段时间有人告诉我,使用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
https://stackoverflow.com/questions/48633180
复制