powershell可通过get-counter等命令采集cpu、内存、磁盘队列长度和网络字节数等核心指标,结合5分钟滑动窗口与斜率趋势判断持续恶化,再通过弹窗、事件日志或邮件预警。
可以利用 powershell 监控 cpu、内存、磁盘和网络的使用率,结合历史数据趋势判断异常,并通过邮件或弹窗等方式发出预警。关键在于采集有代表性的指标、设定合理的阈值、识别持续上升趋势而非瞬时峰值。
核心监控指标与采集方法
PowerShell 通过 Get-Counter 和 Get-Process 等命令获取实时性能数据,推荐使用性能计数器(PerfCounter)保证精度和效率:
- CPU 使用率:
\Processor(_Total)\% Processor Time - 内存使用率:
\Memory\% Committed Bytes In Use - 系统盘(如 C:)磁盘队列长度:
\LogicalDisk(C:)\Current Disk Queue Length(反映 I/O 压力) - 每秒接收字节数(网络入口):
\Network Interface(*)\Bytes Received/sec(可筛选主网卡)
趋势判断逻辑:避免误报的关键
单纯看“是否超阈值”容易误报(如杀毒扫描导致 CPU 短时飙升)。应引入时间窗口和变化斜率判断趋势:
- 每 30 秒采集一次,连续记录最近 10 次(即 5 分钟窗口)
- 对序列做简单线性拟合(用
[Math]::Round((y2−y1)/(t2−t1),2)近似斜率),若斜率 > 0 且最新值 > 85%,视为“持续恶化” - 支持配置最小持续时间(例如:连续 3 次满足条件才触发)
轻量级预警输出方式
不依赖外部服务即可快速响应:
-
弹窗提醒:用
[System.Windows.Forms.MessageBox]::Show("CPU 持续上升,请检查!")(需先Add-Type -AssemblyName System.Windows.Forms) -
写入事件日志:用
Write-EventLog -LogName Application -Source "ResourceMonitor" -EventId 1001 -EntryType Warning -Message "内存使用率趋势异常" -
发送邮件(可选):调用
Send-MailMessage,建议搭配 SMTP 认证和 TLS;生产环境推荐用 Windows 本地 SMTP 服务或企业邮箱 API
脚本运行与部署建议
确保长期稳定运行:
- 以 后台作业(Start-Job)或 Windows 服务形式运行,避免控制台关闭中断
- 用
Register-ScheduledJob设置每分钟执行一次采集任务,比 while 循环更可靠 - 日志文件按天轮转,保留最近 7 天原始数据(便于回溯分析)
- 首次运行自动创建事件源:
New-EventLog -LogName Application -Source "ResourceMonitor"
不复杂但容易忽略:记得在脚本开头加 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force(仅首次),并以管理员权限运行首次注册操作。











