Powershell 中所有进程的 CPU 和内存使用百分比

Say*_*osh 6 powershell powershell-2.0

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

我已经尝试过以下方法:

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

除此之外,我还解析了此信息并计算了总内存中的内存使用百分比,但无法获得相同的 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
Run Code Online (Sandbox Code Playgroud)

Ric*_*ard 7

您可以使用该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))
    }
Run Code Online (Sandbox Code Playgroud)

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

$RAM= Get-WMIObject Win32_PhysicalMemory | Measure -Property capacity -Sum | %{$_.sum/1Mb} 
Run Code Online (Sandbox Code Playgroud)

然后将WorkingSetPrivate计算更改为以下

([math]::Round(($_.WorkingSetPrivate/1Mb)/$RAM*100,2))
Run Code Online (Sandbox Code Playgroud)

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