首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从批处理文件调用时,从Send-MailMessage cmdlet捕获错误

从批处理文件调用时,从Send-MailMessage cmdlet捕获错误
EN

Stack Overflow用户
提问于 2018-12-05 03:27:13
回答 1查看 5.6K关注 0票数 1

我有一个批处理文件,它使用PowerShell的Send-MailMessage cmdlet发送带有状态更新的电子邮件:

代码语言:javascript
复制
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脚本中吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-05 04:26:04

将整个命令包装在try catch块中并抛出显式错误。这将返回一个非零的退出代码。

代码语言:javascript
复制
powershell -command "Try {Send-MailMessage ... -ErrorAction Stop;} Catch { Exit 1 }"

在一行中读起来有点困难,但是:

代码语言:javascript
复制
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
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53620103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档