我有这个简单的脚本:
$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按钮。
那么如何防止阻塞?
答案 0 :(得分:2)
这里有几个注意事项:
-ErrorAction
之类的参数也没有任何价值。这仅适用于函数/ cmdlet(其他任何东西?)。$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/