2013-04-25 1 views
1

Выполнение этого кода внутри PowerShell дает странные результаты:Почему коды возврата для выхода из программы были повреждены при возврате в PowerShell?

PS> .\test.bat; $lastexitcode 
>exit /b 0 
2 

PS> cmd /c exit /b 0; $lastexitcode 
0 

Может кто-нибудь объяснить, как исправить версию пакетного файла? Я также хочу отметить, что значения выхода, отличные от 0, работают правильно.

+0

Что делает пакетный файл? – MDMoore313

+0

2-я строка, эхо, 'exit/b 0' – cmcginty

ответ

0

Все эти решения работают. Если кто-то может объяснить, я был бы признателен:

PS> & cmd.exe /c 'test.bat && exit'; $lastexitcode 
>exit /b 0 
0 

PS> cmd.exe /c 'test.bat && exit'; $lastexitcode 
>exit /b 0 
0 
1

Я был в состоянии воспроизвести с помощью exit /b <code> в pSV2, это, кажется, работает, как ожидалось в PSv3. Для PSv2 он начал работать, как ожидалось, когда я удалил /b, что означает When used in a batch script, this option will exit only the script (or subroutine) but not CMD.EXE.

Есть целый ряд вопросов, сообщенные вокруг PowerShell обработки кодов выхода неправильно: https://connect.microsoft.com/PowerShell/SearchResults.aspx?SearchQuery=exit%2520code

Я не видел этого, в частности, но это не значит, что он не был зафиксирован в PSv3.