请求提供将CPU利用率转换为百分比的PowerShell命令
获取进程CPU利用率百分比的PowerShell命令
你当前使用的Get-Process命令返回的CPU属性是进程启动以来累计使用的CPU时间(单位:秒),并非实时的CPU利用率百分比。以下是两种可靠的转换方法:
方法1:使用系统性能计数器(推荐)
直接调用Windows性能计数器获取实时CPU利用率,这是最准确的方式:
# 获取名称匹配cbft*的进程CPU利用率,保留两位小数并按降序排序 Get-Counter "\Process(cbft*)\% Processor Time" | Select-Object -ExpandProperty CounterSamples | Select-Object @{Name='ProcessName'; Expression={$_.InstanceName}}, @{Name='CPUUsagePercent'; Expression={[math]::Round($_.CookedValue, 2)}} | Sort-Object CPUUsagePercent -Descending
如果要匹配多个进程(比如particular*和cbft*),可修改计数器路径:
Get-Counter "\Process(particular*)\% Processor Time", "\Process(cbft*)\% Processor Time" | Select-Object -ExpandProperty CounterSamples | Select-Object @{Name='ProcessName'; Expression={$_.InstanceName}}, @{Name='CPUUsagePercent'; Expression={[math]::Round($_.CookedValue, 2)}} | Sort-Object CPUUsagePercent -Descending
方法2:通过两次采样计算差值
通过两次获取Get-Process的CPU累计值,结合时间差和CPU核心数计算百分比,适合自定义采样间隔的场景:
# 第一次采集进程数据 $firstSample = Get-Process -Name cbft* | Select-Object ProcessName, CPU, @{Name='SampleTime'; Expression={Get-Date}} # 设置采样间隔(这里为1秒,可按需调整) Start-Sleep -Seconds 1 # 第二次采集进程数据 $secondSample = Get-Process -Name cbft* | Select-Object ProcessName, CPU, @{Name='SampleTime'; Expression={Get-Date}} # 计算并输出CPU利用率百分比 $coreCount = (Get-CimInstance Win32_Processor).NumberOfLogicalProcessors Compare-Object $firstSample $secondSample -Property ProcessName -PassThru | Select-Object ProcessName, @{ Name='CPUUsagePercent'; Expression={ $cpuDelta = $_.CPU - $_.CPU_Previous $timeDelta = ($_.SampleTime - $_.SampleTime_Previous).TotalSeconds [math]::Round(($cpuDelta / ($timeDelta * $coreCount)) * 100, 2) } } | Sort-Object CPUUsagePercent -Descending
关键说明
- 性能计数器返回的
% Processor Time是进程占用所有逻辑核心总性能的百分比(比如4核CPU下,单个进程满负荷运行会显示400%)。 - 方法2中,
$coreCount获取的是逻辑核心数,用于将累计CPU时间转换为实际利用率百分比。
内容的提问来源于stack exchange,提问作者shankar_sn5
相关产品推荐
相关产品推荐

