Вам придется установить $global:LASTEXITCODE
, чтобы установить код выхода, но учтите, что PowerShell функции на самом деле не предназначены для установки кодов выхода, только сценарии , а последний только для сообщения кодов выхода во внешний мир через собственный код выхода процесса PowerShell, когда PowerShell вызывается через его (CLI powershell.exe
для Windows PowerShell, pwsh
для PowerShell Core) из инструмента сборки, запланированной задачи или другой оболочки, например.
Также обратите внимание, что установка $global:LASTEXITCODE
напрямую:
не делает $?
, автоматическую переменную состояния успеха, отражающей $false
в контексте вызывающей стороны, способ, которым exit <nonzero-value>
делает из скрипта, и способ вызова внешней программы, которая сообщает о ненулевом выходекода.
недостаточно для того, чтобы процесс PowerShell в целом сообщал этот код завершения.
Короче говоря: Все, что вы получаете, это то, что вызывающая сторона может проверять $LASTEXITCODE
после вызова вашей функции, так же, как после вызова external программа .
Обычно коды выхода представляют собой концепцию межпроцессного и не вписываются в мир PowerShell.
Для получения дополнительной информации о кодах выхода в PowerShell см. в этом сообщении .
Для кодов выхода PowerShell аналог $?
, автоматическийБулева переменная состояния успеха ($true
или $false
), которая отражает успех команды PowerShell сразу после этого.
(Если эта команда является вызовом внешней программы, код выхода 0
устанавливает $?
на $true
, и любой ненулевой устанавливает его на $false
).
Оказывается, установив , что было тем, что вы действительно хотели спросить.
Начиная с PowerShell Core 7.0.0-preview.5, вы не можете установить $?
напрямую .
На данный момент это единственный способ заставить $?
отражать $false
в области действия вызывающего абонента, и, наоборот, вы не всегда можете гарантировать, что это $true
:
Примечаниечто обе техники неизменно включают в себя сообщение об ошибке .
Поскольку, похоже, именно этого вы и пытаетесь избежать, вам придется подождать, пока не будет реализована возможность прямой установки $?
.
Было принято решение о реализации этой способности , но неясно, когда это будет реализовано.