You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:36:58