如何修改PowerShell脚本实现批量服务器磁盘空间告警单邮件发送
修改后的PowerShell脚本实现批量告警邮件
要实现只发送一封包含所有空间不足服务器的告警邮件,核心是先统一收集所有符合条件的机器信息,最后一次性发送。修改后的脚本如下:
# 初始化存储告警信息的数组 $alertServers = @() foreach ($server in '192.168.1.5', '192.168.1.6', '192.168.1.7') { $availablespace = [Math]::Truncate((Get-WmiObject -Class Win32_LogicalDisk -ComputerName $server -Credential $arpcred | Where-Object { $_.DeviceID -eq 'C:' }).FreeSpace / 1GB) Write-Host $server has $availablespace GB of available space if ($availablespace -lt 10) { Write-Host $server only has $availablespace GB of available space # 将告警信息存入数组,格式可按需自定义 $alertServers += "服务器 $server 的C盘可用空间仅为 $availablespace GB" } } # 遍历完成后检查是否有需要告警的服务器 if ($alertServers.Count -gt 0) { Write-Host 发送批量告警邮件 # 拼接邮件正文,用换行符分隔每个告警条目 $body = "以下服务器C盘可用空间不足10GB:`n`n" + ($alertServers -join "`n") # 统一发送一封告警邮件 Send-MailMessage -From $from -To $to -Subject $subj -Body $body -SmtpServer $smtp -Credential $smtpcred -UseSsl -Port 587 } else { Write-Host 所有服务器C盘空间均正常,无需发送告警邮件 }
关键改动说明
- 新增
$alertServers数组,专门收集所有符合告警条件的服务器信息,避免每台机器单独触发邮件 - 遍历过程中不再调用
Send-MailMessage,而是将告警内容存入数组暂存 - 所有服务器检查完成后,根据数组内容判断是否发送邮件:
- 若数组有内容,拼接成清晰的邮件正文一次性发送
- 若无内容,输出提示信息,不执行邮件发送操作
内容的提问来源于stack exchange,提问作者aristosv
相关产品推荐
相关产品推荐

