Powershell

时间:2016-08-31 08:33:45

标签: powershell powershell-v2.0

有没有办法在PowerShell中查看所有正在运行的进程的CPU和内存利用率百分比?

我尝试了以下内容:

Get-Process | %{"Process={0} CPU_Usage={1} Memory_Usage={2}" -f $_.ProcessName,[math]::Round($_.CPU),[math]::Round($_.PM/1MB)}

除此之外,我已经从总内存中解析了这些信息并计算了内存使用百分比,但是对于CPU来说无法获得相同的结果,因为通过此命令它显示了进程中的CPU时间划分而不是利用率本身。

使用以下命令获取总内存和总CPU利用率:

  1. 全身体记忆

    Get-WmiObject Win32_OperatingSystem | %{"{0}" -f $_.totalvisiblememorysize}

  2. 全部CPU利用率

    Get-WmiObject Win32_Processor | Select-Object -expand LoadPercentage

  3. 任何帮助将不胜感激。我需要它采用以下格式:

    PROCESS=process_name CPU=percent_cpu_utilization_by_process MEMORY=percent_memory_utilization_by_process
    

2 个答案:

答案 0 :(得分:3)

您可以使用WMI对象Win32_PerfFormattedData_PerfProc_Process收集所有这些数据。

Get-WmiObject Win32_PerfFormattedData_PerfProc_Process `
    | Where-Object { $_.name -inotmatch '_total|idle' } `
    | ForEach-Object { 
        "Process={0,-25} CPU_Usage={1,-12} Memory_Usage_(MB)={2,-16}" -f `
            $_.Name,$_.PercentProcessorTime,([math]::Round($_.WorkingSetPrivate/1Mb,2))
    }

如果您需要内存占总内存的百分比,您可以在开始时添加以下内容以获取系统中的总RAM。

$RAM= Get-WMIObject Win32_PhysicalMemory | Measure -Property capacity -Sum | %{$_.sum/1Mb} 

然后将WorkingSetPrivate计算更改为以下

([math]::Round(($_.WorkingSetPrivate/1Mb)/$RAM*100,2))

注意WMI对象中的CPU统计信息四舍五入为最接近的当前值,并且我已计算当前使用的内存(以兆字节为单位)。有关此课程的更多信息,请参阅此link

答案 1 :(得分:0)

您是否尝试过Get-Counter cmdlet?

Get-Counter cmdlet允许您获取本地/远程计算机的性能计数器数据。

查看博客了解更多详情:

http://www.adminarsenal.com/admin-arsenal-blog/powershell-get-cpu-usage-for-a-process-using-get-counter/