Powershell забывает устанавливать ERRORLEVEL для ошибок парсера?

В командной строке попробуйте следующее:

пауэршелл ааа

эхо ErrorLevel: %errorlevel%

Powershell сбой (с ошибкой). Вы также увидите «ErrorLevel равен 1». Это связано с тем, что он запускается aaa как скрипт, который создает необработанную ошибку, которая устанавливает уровень ошибки.

Однако теперь попробуйте следующее:

пауэршелл '

эхо ErrorLevel: %errorlevel%

Powershell сбой (с ошибкой). На этот раз вы также увидите "ErrorLevel is 0".

Я понимаю, что это другая проблема. Powershell даже скажет, что это ParserError, и это потому, что я испортил аргументы командной строки. Тем не менее, это не круто.

Мне непонятно, почему он так себя ведет. Я предполагаю, что это была оплошность. Другие программы пренебрегают установкой уровня ошибки при сбоях, но в этом случае они как будто пошли на полпути. Здесь даже устанавливается значение 0, а не вообще не устанавливается.


person Johnny Kauffman    schedule 15.12.2011    source источник
comment
Одно небольшое исправление: консольное приложение никак не может не устанавливать уровень ошибки. Это возможно только для внутренних команд.   -  person Harry Johnston    schedule 16.12.2011
comment
У Windows Script Host (cscript) аналогичная проблема. Предположительно MS рассматривает Powershell и WSH как альтернативу, а не как клиентов командной оболочки.   -  person Harry Johnston    schedule 16.12.2011
comment
Один из способов обхода заключается в том, чтобы ваш сценарий Powershell/WSH возвращал определенное ненулевое значение в случае успеха; -1 может быть хорошим выбором.   -  person Harry Johnston    schedule 16.12.2011
comment
Я согласен, что идея -1, о которой упоминает Гарри Джонстон, была бы хорошей альтернативой, если бы потребность была достаточно велика и ситуация позволяла бы это.   -  person Johnny Kauffman    schedule 11.01.2012


Ответы (1)


Хм, я думаю, я согласен с тем, что ошибка синтаксического анализа должна устанавливать код возврата не равным нулю. Я предлагаю зарегистрировать это на сайте подключения Powershell. http://connect.microsoft.com/PowerShell

person Andy Arismendi    schedule 16.12.2011
comment
Я полагаю, что мы максимально использовали мозг сообщества в этом вопросе. Я был бы не против иметь дело с кодом возврата 0, если бы была веская причина, но я полагаю, что поведение в этой ситуации просто не было преднамеренно определено. - person Johnny Kauffman; 11.01.2012