You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell代码末尾以百分比形式显示CPU使用率?

获取svchost进程的CPU使用率百分比

你的原有代码存在两个问题:一是% $_.CPU语法错误(ForEach-Object(别名%)需要用花括号包裹执行逻辑);二是$_.CPU返回的是进程启动以来的累计CPU时间,并非实时使用率百分比。下面提供两种可行的实现方法:

方法一:用Get-Counter获取实时使用率(推荐)

Get-Counter可以直接获取系统计数器的实时CPU使用率数据,结果更准确:

Get-Counter "\Process(svchost*)\% Processor Time" | Select-Object -ExpandProperty CounterSamples | ForEach-Object {
    [PSCustomObject]@{
        进程名称 = $_.InstanceName
        CPU使用率百分比 = [math]::Round($_.CookedValue, 2)
    }
}

说明:

  • \Process(svchost*)\% Processor Time指定获取所有svchost进程的处理器时间占比
  • CookedValue是计数器计算后的实际使用率数值,用[math]::Round保留两位小数
  • 输出自定义对象,清晰展示每个svchost进程的使用率

方法二:基于Get-Process计算使用率

通过两次获取进程CPU时间的差值,结合时间间隔计算使用率:

# 首次获取进程数据和时间戳
$initialProcesses = Get-Process svchost | Select-Object Id, ProcessName, CPU, @{Name='采集时间'; Expression={Get-Date}}
Start-Sleep -Seconds 1 # 等待1秒

# 二次获取并计算使用率
$initialProcesses | ForEach-Object {
    $latestProcess = Get-Process -Id $_.Id -ErrorAction SilentlyContinue
    if ($latestProcess) {
        $timeSpan = (Get-Date) - $_.采集时间
        # 计算单核心使用率百分比,需除以CPU核心数
        $cpuPercent = [math]::Round(($latestProcess.CPU - $_.CPU) / $timeSpan.TotalSeconds * 100 / $env:NUMBER_OF_PROCESSORS, 2)
        [PSCustomObject]@{
            进程名称 = $_.ProcessName
            CPU使用率百分比 = $cpuPercent
        }
    }
}

说明:

  • 通过两次采集的CPU时间差除以时间间隔,得到每秒CPU消耗,再除以核心数得到单核心占比
  • 加入错误处理,避免进程在采集间隔内结束导致报错

内容的提问来源于stack exchange,提问作者Inferno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:30:47