【问题标题】:CPU and memory usage in percentage for all processes in PowershellPowershell 中所有进程的 CPU 和内存使用百分比
【发布时间】:2019-10-20 21:49:03
【问题描述】:

有没有办法查看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

任何帮助将不胜感激。我需要以下格式:

PROCESS=process_name CPU=percent_cpu_utilization_by_process MEMORY=percent_memory_utilization_by_process

【问题讨论】:

  • 请看一下给定的答案,如果有人回答了问题或帮助,请点赞或接受,谢谢。

标签: powershell powershell-2.0


【解决方案1】:

您可以使用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 统计数据四舍五入到最接近的当前值,并且我计算了当前使用的内存(以 MB 为单位)。有关此类的更多信息,请参阅link

【讨论】:

  • 谢谢,帮了我很多忙!
  • 这里的-inotmatch 是什么?
  • @MarkSchultheiss 不区分大小写,不匹配。
【解决方案2】:

您是否尝试过 Get-Counter cmdlet?

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

查看博客了解更多详情:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2020-04-25
    相关资源
    最近更新 更多