【问题标题】:Catch Excel Messages and send them via eMail捕捉 Excel 消息并通过电子邮件发送
【发布时间】:2019-11-15 18:02:56
【问题描述】:

从这篇文章开始 How can I catch an Excel file's macro error in Powershell?

每次脚本在特定步骤运行时出现异常,我都需要一些帮助才能让 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(),由于源数据已损坏,它有时会失败。

理想情况下,当仅执行此命令 $wb.RefreshAll() .

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

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

【问题讨论】:

  • 这里有一个错字:$Fales --> $False
  • 我不确定.RefreshAll() 会引发哪种类型的错误,但您可以使用try/catch 块吗?
  • 错误更正,谢谢

标签: excel powershell email exception notifications


【解决方案1】:

您要查找的构造称为try/catch

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

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

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

【讨论】:

  • $wb.RefreshAll() 是一个无效函数。
  • @f6a4 嗯...所以?
  • 你检查了吗?这不会引发错误,RefreshAll 不会返回任何值。
  • @f6a4 不,我没有。我也不需要。异常和返回值完全是两个不同的东西。
  • 但我有。您的解决方案不起作用,因为数据连接断开时不会引发错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
相关资源
最近更新 更多