使用CPU时间显示进程消耗内存

时间:2016-07-16 12:53:43

标签: powershell

我试图通过添加进程的内核模式时间和用户模式时间来显示10个进程,这些进程在具有cpu时间的系统中占用大部分内存。但它什么也没有显示出来。

Get-WmiObject Win32_Process -ComputerName XXXXX |
    Sort-Object WorkingSetSize -Descending |
    Select-Object -First 10 |
    Format-Table -AutoSize Name, ProcessID,
        @{Label = "Consumed Memory(MB)"; Expression = {
            [math]::Round(($_.WorkingSetSize/1MB), 2) }},
        @{Name = "Cpu Time"; Expression = {
            "{0:HH:mm:ss}" -f ([datetime]$ts = [timespan]::FromTicks($_.KernelModeTime + $_.UserModeTime)).Ticks }}

输出:

Name                         ProcessID Consumed Memory(MB) Cpu Time
----                         --------- ------------------- --------
SC.Server.WindowsService.exe     58400             2300.46
tesvc.exe                         1680              138.88
iisexpress.exe                   59004               98.61
java.exe                         39020               77.68
mcshield.exe                      2436               63.68
svchost.exe                        828               47.12
lsass.exe                          588               33.65
CcmExec.exe                       2496                20.8
svchost.exe                        692               14.34
svchost.exe                        796               14.14
你可以告诉我这有什么问题吗?

1 个答案:

答案 0 :(得分:2)

您的括号已关闭,您需要删除分配操作。您需要将Timespan值的刻度转换为DateTime值。

改变这个:

"{0:HH:mm:ss}" -f ([datetime]$ts = [timespan]::FromTicks($_.KernelModeTime + $_.UserModeTime)).Ticks

进入这个:

"{0:HH:mm:ss}" -f [datetime][timespan]::FromTicks($_.KernelModeTime + $_.UserModeTime).Ticks

如果您还可以获得一小段时间,那么您也可以format the Timespan directly

'{0:c}' -f [timespan]::FromTicks($_.KernelModeTime + $_.UserModeTime)