请求修改PowerShell脚本:新增高CPU占用的进程/服务识别功能
修改后的CPU高占用告警PowerShell脚本
以下是添加了高CPU占用进程信息的完整脚本,会在CPU总占用率≥90%时,将Top 10高CPU进程信息以HTML表格形式包含在告警邮件中:
# 定义收件人 $recipients = "recipient@example.com" while($true){ # 获取CPU总占用率 $cpuTotal = (Get-Counter -Counter "\Processor(_Total)\% Processor Time").CounterSamples.CookedValue if($cpuTotal -ge 90){ # 获取Top 10高CPU占用的进程(按累计CPU使用率排序) $topProcesses = Get-Process | Sort-Object CPU -Descending | Select-Object Name, Id, @{Name="CPU%"; Expression={[math]::Round($_.CPU, 2)}} -First 10 # 构建HTML格式的邮件正文 $body = @" <h3>CPU高占用告警</h3> <p>当前CPU总占用率:<strong>$([math]::Round($cpuTotal, 2))%</strong></p> <p>Top 10高CPU占用进程:</p> <table border='1' cellpadding='4'> <tr> <th>进程名称</th> <th>进程ID</th> <th>累计CPU使用率%</th> </tr> $($topProcesses | ForEach-Object { "<tr><td>$($_.Name)</td><td>$($_.Id)</td><td>$($_.CPU%)</td></tr>" }) </table> "@ # 发送告警邮件,指定Body为HTML格式 Send-MailMessage -Body $body -BodyAsHtml ` -From "MyPC@XXXXX" ` -SmtpServer "xxx.xxx.xxx" ` -Subject "CPU High on my PC - 当前占用率 $([math]::Round($cpuTotal, 2))%" ` -To $recipients } Start-Sleep -Seconds 60 }
关键修改说明
- 进程信息采集:用
Get-Process获取所有进程,按累计CPU使用率降序排序后取前10个,同时将CPU数值格式化保留两位小数 - HTML格式邮件:把告警内容和进程信息整理成表格形式,通过
-BodyAsHtml参数让邮件客户端按HTML渲染,提升可读性 - 动态内容优化:邮件主题加入实时CPU占用率,正文明确展示总占用率和Top进程的名称、ID、CPU使用率
- 配置简化:将收件人变量提取到脚本开头,方便后续修改
内容的提问来源于stack exchange,提问作者Allan Ray
相关产品推荐
相关产品推荐

