Операторы exit
в вашем коде заставляют ваш скрипт завершиться до того, как он достигнет точки, где $exit
будет записано в выходной файл.Но даже если бы он туда попал, он на самом деле не записывал бы код выхода, потому что ключевое слово exit
волшебным образом не заполняет (неопределенную) переменную $exit
кодом выхода.Возможно, вы путаете его с автоматической переменной $LastExitCode
, которая обновляется на стороне вызывающая сторона после выхода вызываемой стороны.
То, что вы на самом деле хотите сделать, этоопределите пользовательскую функцию, которая правильно устанавливает код выхода и делает все остальное, что вы хотите сделать перед фактическим выходом:
function ExitWithCode($exitcode) {
$host.SetShouldExit($exitcode)
$exit | Out-File -FilePath 'C:\stuff\PSOutput.txt'
exit $exitcode
}
, затем используйте ее в своем коде так:
try {
[IO.File]::OpenWrite($file).Close()
ExitWithCode 0
} catch {
ExitWithCode 999
}
Использование$host.SetShouldExit()
в дополнение к exit
гарантирует, что ваш скрипт всегда устанавливает правильный код завершения, независимо от того, как он вызывается .