我有一个批处理文件,它使用PowerShell的Send-MailMessage cmdlet发送带有状态更新的电子邮件:
powershell -command " & {Send-MailMessage -SMTPServer smtp.somewhere.com -From 'Sender <sender@email.com>' -To 'Recipient <recipient@email.com>' -Subject 'Subject' -Body 'Body' -Attachments 'D:\Logs\Log.log';}"
if %ERRORLEVEL% neq 0 (
echo ERROR - Something went wrong sending the email
goto Error
)
如果Send-MailMessage命令失败(例如,如果找不到附件文件或其他错误),%ERRORLEVEL%不会上升到0以上。
其他答案建议将显式退出代码添加到PowerShell脚本中以返回代码,但是如果使用Send-MailMessage之类的内置PS cmdlet,我找不到任何关于如何捕获错误的内容。可以这样做吗?或者我需要将Send-MailMessage包装在另一个PS脚本中吗?
发布于 2018-12-05 04:26:04
将整个命令包装在try catch块中并抛出显式错误。这将返回一个非零的退出代码。
powershell -command "Try {Send-MailMessage ... -ErrorAction Stop;} Catch { Exit 1 }"
在一行中读起来有点困难,但是:
powershell -command "Try {Send-MailMessage -SMTPServer smtp.somewhere.com -From 'Sender <sender@email.com>' -To 'Recipient <recipient@email.com>' -Subject 'Subject' -Body 'Body' -Attachments 'D:\Logs\Log.log' -ErrorAction Stop;} Catch { Exit 1 }"
if %ERRORLEVEL% neq 0 (
echo ERROR - Something went wrong sending the email
goto Error
)
https://stackoverflow.com/questions/53620103
复制相似问题