PowerShell 是 Windows 平台采集性能计数器最灵活、免安装、可脚本化的方案,支持 Get-Counter 实时采集、CSV 导出、后台计划任务及计数器路径验证,需注意权限、频率与错误处理。
powershell 是 windows 平台上采集性能计数器最灵活、免安装、可脚本化的方案之一。它直接调用 .net 的 system.diagnostics.performancecounter 类或使用内置 cmdlet(如 get-counter),无需额外工具即可获取 cpu、内存、磁盘、网络等实时或历史性能数据。
快速采集单次性能指标
使用 Get-Counter 最简单直接。例如,获取当前 CPU 使用率:
-
Get-Counter '\Processor(_Total)\% Processor Time'—— 返回带时间戳的原始对象,含CounterSamples.CookedValue - 采集多个计数器:传入数组,如
Get-Counter '\Memory\Available MBytes', '\PhysicalDisk(_Total)\% Disk Time' - 加
-SampleInterval 2 -MaxSamples 5可连续采样 5 次,每 2 秒一次
导出为 CSV 供后续分析
采集结果默认是复杂对象,需展开并格式化才能保存为结构化文件:
- 用
Select-Object Timestamp, @{Name='CPU';Expression={$_.CounterSamples[0].CookedValue}}提取关键字段 - 管道接
Export-Csv -Path "perf_$(Get-Date -Format 'yyyyMMdd_HHmm').csv" -NoTypeInformation - 注意:多计数器时需遍历
CounterSamples,或用ForEach-Object { $_.CounterSamples | Select-Object ... }展平
后台长期采集(计划任务 + 脚本)
让采集任务在系统后台稳定运行,推荐组合方式:
- 编写脚本(如
collect-perf.ps1),内含循环采集逻辑、自动轮转文件名、错误重试机制 - 用
Register-ScheduledJob或任务计划程序(schtasks.exe)设置每 5 分钟触发一次 - 建议启用
-ExecutionPolicy Bypass参数避免策略拦截;脚本开头加Set-Location $PSScriptRoot确保路径可靠
常见计数器路径写法与验证
计数器路径格式为 \对象(实例)\计数器名称,易错点需留意:
- CPU 总使用率:
\Processor(_Total)\% Processor Time(注意下划线和括号) - 某进程 CPU 时间:
\Process(notepad)\% Processor Time;可用Get-Counter -ListSet Process | Select-Object -ExpandProperty Counter查所有进程实例 - 首次使用前建议先运行
Get-Counter -ListSet Memory确认本地是否存在该性能对象(部分 Server Core 或精简版可能缺失)
不复杂但容易忽略细节——比如权限不足时会静默失败,建议脚本中加入 try/catch 和日志记录;采集频率过高也会影响目标系统,生产环境建议间隔不低于 1 秒。



















