PowerShell循环发送邮件并写入日志排查邮件发送故障
PowerShell循环发送邮件并记录详细日志脚本
没问题,我给你写个完全符合需求的PowerShell脚本,既能循环执行100次邮件发送、每2秒一次,还会把每次的执行结果(成功/失败+错误信息)都记录到日志里,最后还会生成统计总结,方便你排查服务器的间歇性故障。
完整脚本
# 设置日志文件路径(带时间戳,避免覆盖旧日志) $logPath = ".\EmailSendLog_$(Get-Date -Format 'yyyyMMdd_HHmmss').log" # 初始化计数器 $successCount = 0 $failureCount = 0 # 循环执行100次 for ($i = 1; $i -le 100; $i++) { $currentTime = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' Write-Host "正在执行第 $i 次发送 ($currentTime)" try { # 执行邮件发送命令(保留你原有的参数) Send-MailMessage -From "test@xxx.com" -To "aaa@xxx.com","bbb@xxx.com","ccc@xxx.com","ddd@xxx.com" -SmtpServer "xx.xx.xx.xx" -Subject "Test email subject - 第 $i 次发送" -Body "Test email body - 发送时间:$currentTime" # 记录成功日志 $successLog = "[$currentTime] 第 $i 次发送成功" Add-Content -Path $logPath -Value $successLog $successCount++ } catch { # 记录失败日志,包含详细错误信息 $errorMessage = $_.Exception.Message $failureLog = "[$currentTime] 第 $i 次发送失败 - 错误信息:$errorMessage" Add-Content -Path $logPath -Value $failureLog $failureCount++ } # 每2秒执行一次 Start-Sleep -Seconds 2 } # 写入最终统计总结到日志 $summary = @" ==================================== 测试完成统计: 总执行次数:100次 成功次数:$successCount 次 失败次数:$failureCount 次 ==================================== "@ Add-Content -Path $logPath -Value $summary Write-Host "测试完成,日志已保存到:$logPath" Write-Host $summary
关键部分说明
- 日志文件命名:脚本会自动生成带时间戳的日志文件(比如
EmailSendLog_20240520_153022.log),这样每次测试的日志都不会互相覆盖,方便后续对比分析。 - Try-Catch异常捕获:用
try-catch包裹邮件发送命令,即使某次发送失败,脚本也会继续执行剩下的测试,不会中途停止,同时会把错误信息完整记录下来。 - 计数器与总结:脚本会实时统计成功和失败的次数,测试结束后会在日志末尾生成清晰的统计总结,让你一眼就能看到整体的发送情况。
- 邮件主题/内容优化:我给邮件主题和内容加了发送次数和时间,方便你在收件箱里也能对应上日志里的记录(如果有成功送达的邮件)。
你只需要把脚本里的From、To、SmtpServer参数替换成你实际的配置,然后在PowerShell里运行即可。
内容的提问来源于stack exchange,提问作者Ayush
相关产品推荐
相关产品推荐

