如何在可执行文件崩溃和阻止后继续执行powershell脚本

时间:2010-07-20 08:51:20

标签: scripting powershell blocking

我有这个简单的脚本:

$files = dir .\configs | ? { !$_.PSIsContainer }

foreach($file in $files)
{
    try
    {
        .\MyApp.exe -ErrorAction Stop $file
    }
    catch
    {
         write-host "!!!!!!!!!!!!error!!!!!!!!!!!!!!"
         continue
    }   
}

问题在于

.\MyApp.exe -ErrorAction Stop $file

崩溃,出现关于应用程序崩溃的Windows消息框,我的脚本阻止,catch没有被击中,只有继续方法是单击消息框中的Storno按钮。

那么如何防止阻塞?

3 个答案:

答案 0 :(得分:2)

这里有几个注意事项:

  • 此对话框由操作系统管理,因此没有任何关于PowerShell的信息。 PowerShell无法做任何事情。您可以使用一些自动化来查找窗口和“单击”按钮,但这确实很尴尬。
  • 同时应用-ErrorAction之类的参数也没有任何价值。这仅适用于函数/ cmdlet(其他任何东西?)。
  • 应用程序应返回0(成功)或其他任何内容(失败),它们不会抛出异常。在您的情况下,您可以使用包含应用程序退出代码的$lastexitcode

注意,正确编码的应用程序应该真正返回其退出代码,并且可以向控制台写入内容。如果它在那个消息框中失败,那就没有任何借口了。应该使用Main函数中至少一个大的try / catch块。

答案 1 :(得分:0)

。\ MyApp.exe -ErrorAction停止$ file

另外,-ErrorAction在遗留应用程序中没有任何意义。它是一个cmdlet参数。

答案 2 :(得分:0)

我知道这不是问题的直接答案,就像应用程序未报告错误一样,那么您可能无法在Powershell中捕获该错误。

但是,如果问题是该对话框导致脚本暂停,并且您希望脚本继续运行,则可以禁用“ MyApp.exe已停止工作”错误对话框,该对话框将在窗口中弹出允许脚本继续。

有关更多信息,请参见此博客: https://www.raymond.cc/blog/disable-program-has-stopped-working-error-dialog-in-windows-server-2008/