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

Windows11本地PowerShell脚本CPU/RAM日志数值异常问题咨询

解决Windows 11与Windows Server 2022上PowerShell CPU使用率统计差异问题

问题根源

Windows 11和Windows Server 2022在CPU性能计数器的采样、调度逻辑上存在差异:

  • Win11的电源管理(如平衡模式)会动态调整核心功耗状态,导致\Processor(_Total)\% Processor Time计数器的统计值偏离实际负载
  • 部分脚本依赖核心数手动计算平均使用率,但不同系统对物理核心、超线程核心的计数逻辑不一致,进一步放大误差

修正后的脚本(跨系统一致)

使用CIM调用预格式化的性能数据类,避免手动计算带来的偏差:

# 获取CPU总使用率(跨Windows版本逻辑统一)
$cpuTotal = Get-CimInstance Win32_PerfFormattedData_PerfOS_Processor -Filter "Name='_Total'"
$cpuUsage = $cpuTotal.PercentProcessorTime

# 获取RAM使用率
$osInfo = Get-CimInstance Win32_OperatingSystem
$usedRam = $osInfo.TotalVisibleMemorySize - $osInfo.FreePhysicalMemory
$ramUsage = [math]::Round(($usedRam / $osInfo.TotalVisibleMemorySize) * 100, 2)

# 写入日志
$logContent = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - CPU使用率: $cpuUsage%, RAM使用率: $ramUsage%"
Add-Content -Path ".\system_usage.log" -Value $logContent

额外排查步骤

  1. 电源模式验证:将Win11的电源模式切换为「高性能」,测试计数器数值是否与任务管理器一致
  2. 计数器直接校验:在PowerShell中直接执行Get-Counter '\Processor(_Total)\% Processor Time',连续执行3-5次,观察数值波动是否符合实际负载
  3. 避免核心数依赖:不要用(Get-CimInstance Win32_Processor).NumberOfLogicalProcessors这类值来计算平均使用率,不同系统的核心计数规则不同

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:27:13