【问题标题】:Suppress error window on catastrophic powershell process failure抑制灾难性 Powershell 进程失败的错误窗口
【发布时间】:2016-06-23 05:12:36
【问题描述】:

我正在使用 Powershell 自动生成一些报告。这是一项令人不快的业务,将 PDF 与 Excel 互操作和第三方 DLL 拼贴在一起。由于我试图将所有粗略的东西编组在一起,有时我的 powershell 进程会完全死掉。为了缓解这种情况,我在主管脚本中运行它,如下所示:

while($moreToDo) {

    try {
        powershell -NonInteractive -NoProfile ./generate-report.ps1
    }
    catch {
        # clean up
        Write-Host "Failed. Trying again..."
    }
}

但是,当powershell 进程终止时,我得到一个“windows powershell 已停止工作”对话框:

此对话框阻止主管脚本继续,这使我的主管脚本毫无意义。

有没有办法调用 powershell,如果它发生灾难性故障,它不会弹出此消息,而只是 dies

【问题讨论】:

  • 您是否使用某种 GUI(Windows 窗体或 WPF)?
  • @sodawillow 我的脚本只是一个普通的旧 powershell 脚本。但它正在调用 Excel 互操作,这意味着它正在启动 GUI Excel 进程。

标签: powershell


【解决方案1】:

该对话框由Windows Error Reporting 系统建立。这是操作系统响应 powershell.exe 进程崩溃。

可以禁用 WER 或将 WER 配置为忽略 powershell.exe。见https://stackoverflow.com/a/3637710。然而,这是一条非常危险的道路。

更好的主意是修改您的脚本以不使 PowerShell 崩溃。如果您使用代码发布问题,我们可能会帮助您找出导致崩溃的原因以及如何避免它。

【讨论】:

  • 谢谢,很高兴了解 WER。我很清楚修复我的脚本是一个更好的主意。然而,这是一项一次性的牦牛剃须加急工作,充满了变通方法和技巧。我认为不值得尝试追踪不常见的和准随机的失败:我只会处理它偶尔死亡并在需要时终止 WER 消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2019-02-19
  • 1970-01-01
  • 2021-10-13
  • 2020-03-18
相关资源
最近更新 更多