2012-02-09 118 views
1

我有一个脚本在任务失败时发送电子邮件(SendMailErr)。如果以前的发送邮件消息失败,我想添加重试以发送电子邮件。我试图把它放入try函数中,最后在函数内循环,但它没有像预期的那样工作。这里是我的代码等待60秒,然后重新发送,如果Send-MailMessage失败Powershell

$waitMail = 60 
$sendErr = "Error Sending Email to SI Team: $_. Retrying in $waitMail minute(s)" 

function SendMailErr { 
$MessageParameters = @{ 
    From = $from 
    To = $to 
    Subject = "ALERT: Backup Failed for $env:ComputerName.$env:USERDNSDOMAIN - $((Get-Date).ToShortDateString())" 
    Body = $body | Out-String 
    SmtpServer = $Smtp 
    Priority = "High" 
    Attachments = $attachments 
} 
try { Send-MailMessage @MessageParameters -EA Stop 
     Exit 
    } 
catch { Write-Log $sendErr 
     Sleep $waitMail 
     Send-MailMessage @MessageParameters 
     Exit 
     } 
finaly { 
     Write-Log "Error: Unable to send email to SI Team" 
     Exit 
} 

任何建议将不胜感激。我相信有更好的方法来构建它,我的谷歌搜索还没有发现它。

感谢, 阿梅利亚


我在我自己的笨拙方式想通了这一点......

感谢您给指出了我的陷阱内的退出的人。

我下面的作品现在

function SendMailErr { 
$MessageParameters = @{ 
    From = $from 
    To = $to 
Subject = "ALERT: Backup Failed for $env:ComputerName.$env:USERDNSDOMAIN - $((Get-Date).ToShortDateString())" 
SmtpServer = $smtp 
    Body = $body 
Priority = "High" 

} 
try { 
    Send-MailMessage @MessageParameters -EA Stop; 

    } 
catch { Write-Host $sendErr 
    Sleep $waitMail 
    Send-MailMessage @MessageParameters 
     } 

Exit 
} 
+0

你忘了说明问题。你期望什么?发生了什么? – 2012-02-09 03:14:15

+0

对不起。它根本没有发送电子邮件。我希望它会尝试发送电子邮件,如果它没有在日志文件中写入,如果失败,但又在尝试。我发现发送邮件偶尔没有发送,但一分钟后手动重试(SMTP服务不可用) – user1131196 2012-02-09 03:28:38

+1

很高兴你知道了。只是为了让你知道,你可以在这里回答你自己的问题,这非常好。 – 2012-02-09 05:51:31

回答

1
function SendMailErr { 
$MessageParameters = @{ 
From = $from 
To = $to 
Subject = "ALERT: Backup Failed for $env:ComputerName.$env:USERDNSDOMAIN - $((Get-  Date).ToShortDateString())" 
SmtpServer = $smtp 
Body = $body 
Priority = "High" 

} 
try { 
Send-MailMessage @MessageParameters -EA Stop; 

} 
catch { Write-Host $sendErr 
Sleep $waitMail 
Send-MailMessage @MessageParameters 
    } 

Exit 
}