Power shell在循环中发送电子邮件并将输出写入文件

时间:2018-06-01 15:42:39

标签: powershell windows-server-2012 windows-server-2012-r2

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" -Body "Test email body"

我想在循环中使用上面的命令编写一个脚本,说100次并每2秒运行一次并将输出写入日志文件,以后可用于分析。

问题:发送电子邮件时,我的严重问题会出现间歇性问题。我想查看日志,看看有多少电子邮件通过100个,有多少邮件失败,有什么错误信息。

1 个答案:

答案 0 :(得分:0)

多次运行需要某种循环。 for循环似乎最适合每个循环100,并且while循环似乎适合循环每个集合。

由于您正在快速运行命令,因此您需要某种并行性。作业,运行空间和工作流是三种最常见的形式。工作是最容易合作的,但效率最低。

然后Start-Sleep命令可用于试验之间的延迟。

有很多方法可以写出文件,Out-File -Append是一种方式。 Try\catch可用于捕获错误并将其输出到日志中。

$Iterations = 100
$Delay = 2
$StopTime = (Get-Date).AddMinutes(5)
$Command = {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" -Body "Test email body"}


while ((Get-Date -le $StopTime)) {
    try {
        Remove-Job -State Completed
        for ($i = 0; $i -lt $Iterations; $i++) {
            Start-Job -ScriptBlock $command
        }
        "Jobs created at (Get-Date)" | Out-File "C:\example\log.txt" -Append
        Start-Sleep $delay
    }
    catch {
        $error[0] | Out-File "C:\example\log.txt" -Append
    }
}