我试图通过添加进程的内核模式时间和用户模式时间来显示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你可以告诉我这有什么问题吗?
答案 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)