考虑以下PowerShell脚本:
Get-Process |
Select-Object @{Name='ID';Expression={$_.Id}}, @{Name='Process Name';Expression={$_.Name}},
@{Name='WS';Expression={"{0:N1}" -f($_.WorkingSet/1MB)}},
@{Name='Private';Expression={"{0:N1}" -f($_.PrivateMemorySize/1MB)}},
@{Name='Virtual';Expression={"{0:N1}" -f($_.VirtualMemorySize/1MB)}} | Sort-Object WS |
Format-Table -AutoSize
它似乎没有问题。但是,当我浏览结果时,我可以看到“工作集”对象的排序没有按预期进行(请注意,流程如何在“ 11.7”之前对“ 106.8”进行排序,就好像它是按第一个顺序排序一样)数字,然后是第二个,依此类推):
ID Process Name WS Private Virtual
-- ------------ -- ------- -------
1156 svchost 1.9 1.5 73.2
628 svchost 10.5 15.4 148.7
116 svchost 10.8 4.5 119.4
660 chrome 106.8 163.8 601.0
5708 svchost 11.7 5.1 115.3
关于如何解决此问题的任何想法?
我也尝试过按“ WorkingSet”进行排序,如:
Sort-Object WorkingSet
尽管如此,结果还是没有对结果进行排序。
答案 0 :(得分:3)
您应该将“排序对象”放在“选择对象”之前。
Get-Process | Sort-Object WS
这将为您提供所需的输出。
答案 1 :(得分:0)
您可以将一个属性保留在num中,以进行排序并在之后删除,例如:
Get-Process | %{
[pscustomobject]@{
ID=$_.Id
'Process Name'=$_.Name
WS="{0:N1}" -f ($_.WorkingSet/1MB)
Private="{0:N1}" -f ($_.PrivateMemorySize/1MB)
Virtual="{0:N1}" -f ($_.VirtualMemorySize/1MB)
WSNum=$_.WorkingSet
}
} | Sort WSNum | select * -ExcludeProperty WSNum | ft -AutoSize
答案 2 :(得分:0)
您可以将变量保留为十进制的十进制形式:
Get-Process | %{
[pscustomobject]@{
ID=$_.Id
'Process Name'=$_.Name
WS=[math]::Round($_.WorkingSet/1MB, 1)
Private=[math]::Round($_.PrivateMemorySize/1MB, 1)
Virtual=[math]::Round($_.VirtualMemorySize/1MB, 1)
}
} | Sort WS | ft -AutoSize