Вопрос по windows – Разница между $? и $ LastExitCode в PowerShell

51

В PowerShell какая разница между$? а также$LastExitCode?

Я читаюоб автоматических переменныхи сказал:

$? Contains the execution status of the last operation. It contains TRUE if the last operation succeeded and FALSE if it failed.

$LastExitCode Contains the exit code of the last Windows-based program that was run.

В определении$? это не объясняет, что означает успех и неудача.

Я спрашиваю, потому что я предположил, что$? Истинно, если и только если $ LastExitCode равен 0, но я нашел удивительный контрпример:$ LastExitCode = 0, но $? = False в PowerShell. Перенаправление stderr в stdout дает NativeCommandError.

Ваш Ответ

1   ответ
54

$LastExitCode это код возврата нативных приложений.$? просто возвращаетсяTrue или жеFalse в зависимости от того, была ли последняя команда (командлет или собственная команда) завершена без ошибок или нет.

Для командлетов сбой обычно означает исключение, для собственных приложений это ненулевой код выхода:

PS> cmd /c "exit 5"
PS> $?
False
PS> cmd /c "exit 0"
PS> $?
True

Отмена командлета с помощьюCtrl+C также будет считаться неудачей; для нативных приложений это зависит от того, какой код выхода они установили.

Спасибо, Джои. Я сам думал, что $? означал ненулевой код выхода, но я только что нашел удивительный контрпример. Увидетьstackoverflow.com/questions/10666101/… Colonel Panic
И разные командлеты: @iex abcde @, например, не возвращает ни $? = False, ни $ LastExitCode & gt; 0
Это интересно. Я считаю, что это ошибка (потому что она ведет себя непоследовательно между различными хостами PowerShell).

Похожие вопросы