2016-07-16 85 views
2

我试图通过添加进程的内核模式时间和用户模式时间来显示10个进程,这些进程正在使用cpu时间消耗系统中的大部分内存。但它什么也没有显示。显示进程占用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

的错误您看不到如下所示:'无法将“System.TimeSpan”类型的“00:01:33.0156250”值转换为键入“System.D ateTime“'。它们是由这部分引起的[日期时间] $ ts = [timespan] :: fromticks(...'。不知道如何解决这个问题,虽然。 – sodawillow

回答

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) 
+0

真棒。非常感谢。 –

相关问题