首页 > 解决方案 > 捕获 Excel 消息并通过电子邮件发送

问题描述

从这篇文章开始 如何在 Powershell 中捕获 Excel 文件的宏错误?

每次脚本在特定步骤运行时出现异常时,我都需要一些帮助才能让 PowerShell 向我发送电子邮件。

这是我当前脚本的代码。

app = New-Object -comobject Excel.Application
$app.Visible = $False
$app.DisplayAlerts = $False
$wb = $app.Workbooks.Open("\\IESWDBMSFSP001\SHARED02\Technical_Training\PUBLIC\REPORT\USER_FEED\LMS_USERS_QUERY.xlsx")
$wb.Name
$wb.RefreshAll()
$wb.Save()
$wb.Close()
$app.Quit()

关键部分是$wb.RefreshAll(),由于源数据已损坏,它有时会失败。

理想情况下,当仅执行此命令引发异常时,我想从 PowerShell 触发一封带有固定主题$wb.RefreshAll()“错误用户查询”的非常基本的电子邮件。

我会使用这个代码的一个稍微修改过的版本来发送电子邮件,所以这部分我很好。 https://gallery.technet.microsoft.com/scriptcenter/Send-HTML-Email-Powershell-6653235c

我不知道并且需要帮助的是如何触发电子邮件,我想我需要一个 if 语句:“IF 异常,发送电子邮件,ELSE 关闭并保存”

标签: excelpowershellemailexceptionnotifications

解决方案


您正在寻找的构造称为try/catch

try {
    $wb.RefreshAll()
    $wb.Save()
} catch {
    $msg = $_.Exception.Message
    Send-MailMessage ... -Body $msg
}

$wb.Close($false)
$app.Quit()

RefreshAll()这将捕获由(and ) 引发的异常(准确地说是终止错误Save()),并将发送带有错误消息的邮件。


推荐阅读