Итак, у меня есть сценарий powershell для установки службы NServiceBus в качестве службы Windows.Захват ошибок при установке службы NServicebus в Powershell
Invoke-Expression "$fullNsbHostPath $arguments"
Для полноты, я пытался как Invoke-Expression
и Start-Process
:
Start-Process -Wait -NoNewWindow -FilePath $fullNsbHostPath -ArgumentList $arguments -RedirectStandardOutput $tempFileName -ErrorVariable $errvar
Она запускает программу установки просто отлично, что при определенных обстоятельствах сообщает исключение Например:
Failed to execute installers: System.Data.SqlClient.SqlException
(0x80131904): A connection was successfully established with the
server, but then an error occurred during the login process.
(provider: Shared Memory Provider, error: 0 - No process is on the
other end of the pipe.) ---> System.ComponentModel.Win32Exception
(0x80004005): No process is on the other end of the pipe ... Error
....
Number:233,State:0,Class:20
Я доволен этим. I ожидаем исключение. Однако сам процесс не дает никаких указаний на то, что он потерпел неудачу. Действительно, сам скрипт Powershell завершается успешно.
Я мог разобрать выходной текст для кода ошибки или, может быть, некоторого текста «исключения», но это кажется печально неудовлетворительным.
Я не думаю, что это проблема с Powershell. Когда я запускаю его просто через командную строку и проверяю %errorlevel%
, я получаю 0
. Кроме того, несколько других примеров онлайн-скриптов, которые делают то же самое, также опускают любое распространение ошибок.
Любые предложения?
NServiceBus.Host.exe содержит код, который улавливает все исключения, затем записывает деталь исключения в консоль (stdout, а не stderr) и не устанавливает код выхода, поэтому, не разбираясь в полном выходе, я думаю, повторно застрял. –