powershell 是 windows 系统性能监控的高效工具,通过 get-counter、get-process 等 cmdlet 实现采集、处理与可视化;支持精准计数器定位、定时采样导出、多指标合并、统计报表生成、阈值告警及日志集成。
powershell 是 windows 系统性能监控的高效工具,无需第三方软件即可采集、处理、可视化关键指标。核心在于结合 get-counter、get-process、get-performancecountercategory 等 cmdlet,按需定制数据源、聚合逻辑与输出格式。
精准采集目标性能计数器
避免默认全量采集带来的性能开销和冗余数据。先用 Get-PerformanceCounterCategory 查看可用类别,再用 Get-Counter -ListSet 定位具体计数器路径。例如获取本机 CPU 使用率:
Get-Counter '\Processor(_Total)\% Processor Time'- 若监控多个核心,可替换
_Total为0、1等实例名 - 支持通配符:如
'\Memory\Available MBytes'或'\LogicalDisk(*)\% Free Space'
定时采集并结构化存储
使用 Get-Counter -SampleInterval 和 -MaxSamples 实现周期性采样,再导出为 CSV 或 JSON 方便后续分析:
Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 5 -MaxSamples 12 | Export-Csv -Path "cpu_log.csv" -NoTypeInformation- 添加时间戳字段:
... | ForEach-Object { [PSCustomObject]@{Time = $_.Timestamp; Value = $_.CounterSamples.CookedValue} } | Export-Csv ... - 多计数器合并采集:传入数组
Get-Counter @('\Processor(_Total)\% Processor Time', '\Memory\Available MBytes')
生成可读性强的汇总报表
用 PowerShell 原生能力做基础统计与格式化,不依赖外部图表库也能输出清晰文本报表:
- 计算平均值、峰值、波动范围:
$data = Import-Csv cpu_log.csv; ($data.Value | Measure-Object -Average -Maximum -Minimum) - 标记异常值(如 CPU > 90%):
$data | Where-Object { [double]$_.Value -gt 90 } | Format-Table Time, Value -AutoSize - 生成带标题的 HTML 表格:
ConvertTo-Html -Title "Daily Performance Report" -PreContent "<h2>CPU Usage Summary</h2>" | Out-File report.html
集成告警与自动化分发
将监控逻辑封装为脚本,配合任务计划程序或事件触发机制实现主动响应:
- 简单阈值告警:
if ((Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue -gt 95) { Send-MailMessage -To "admin@local" -Subject "High CPU Alert" -Body "CPU exceeded 95%" -SmtpServer "smtp.local" } - 每日凌晨自动生成昨日报表:
PowerShell.exe -ExecutionPolicy Bypass -File C:\Scripts\perf-report.ps1加入 Windows 任务计划 - 输出结果同时写入 Event Log,便于统一日志平台采集:
Write-EventLog -LogName Application -Source "PerfMonitor" -EventID 1001 -EntryType Information -Message "Report generated at $(Get-Date)"
不复杂但容易忽略细节:注意权限(常需管理员运行)、计数器路径大小写敏感、远程采集需启用 Performance Logs & Alerts 服务及 DCOM 配置。从单点指标开始验证,再逐步叠加维度和逻辑。











