Как продолжить сценарий powershell после сбоя и блокировки исполняемого файла - PullRequest
2 голосов
/ 20 июля 2010

У меня есть этот простой скрипт:

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

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

Проблема в том, что когда происходит сбой

.\MyApp.exe -ErrorAction Stop $file

, появляется окно сообщения о сбое приложения и мой блок скрипта, catch ненажмите, и единственный способ продолжить это нажать кнопку Storno в окне сообщения.

Так как предотвратить блокировку?

Ответы [ 3 ]

2 голосов
/ 20 июля 2010

Здесь применимо несколько примечаний:

  • Этот диалог управляется операционной системой, поэтому в PowerShell ничего нет.PowerShell ничего не может с этим поделать.Вы можете использовать некоторую автоматизацию, чтобы найти окно и кнопку «щелкнуть», но это действительно неудобно.
  • Также применение таких параметров, как -ErrorAction, не имеет значения.Это относится только к функциям / командлетам (что-нибудь еще?).
  • Приложения должны возвращать 0 (успех) или что-либо еще (сбой), они не генерируют исключения.В вашем случае вы можете использовать $lastexitcode, который содержит код завершения приложения.

Обратите внимание, что правильно закодированное приложение должно действительно возвращать свой код завершения, и может записать что-либоприставка.Если это ужасно не с этим окном сообщения, нет никаких оправданий.Следует использовать хотя бы один большой блок try / catch в функции Main.

0 голосов
/ 12 октября 2018

Я знаю, что это не прямой ответ на вопрос, так как если приложение не сообщает о своей ошибке, возможно, вы не сможете зафиксировать эту ошибку внутри powershell.

Однако, если проблема заключается в том, что диалоговое окно вызывает остановку вашего скрипта, и вы все равно хотите, чтобы он продолжался, вы можете отключить появление диалогового окна с ошибкой «MyApp.exe перестала работать» в окнах, Позвольте вашему сценарию продолжить.

Смотрите этот блог для получения дополнительной информации: https://www.raymond.cc/blog/disable-program-has-stopped-working-error-dialog-in-windows-server-2008/

0 голосов
/ 21 июля 2010

. \ MyApp.exe -ErrorAction Stop $ file

Кстати, -ErrorAction не имеет смысла в старых приложениях.Это параметр командлета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...