Подтвердить что ты не робот

Powershell: $LASTEXITCODE в функции

Привет, я замечаю нечетное поведение со следующим фрагментом кода

function test
{
    $LASTEXITCODE = $null
    ping asdfs
    Write-Host "Last exitcode: $LASTEXITCODE"
}

test
Write-Host "Last exitcode: $LASTEXITCODE"

Выход из этого

Ping request could not find host asdfs. Please check the name and try again.
Last exitcode: 
Last exitcode: 1

Почему $LASTEXITCODE не установлен в функции test()?

Это обобщение проблемы, с которой я столкнулся сейчас, когда я вызываю Win32.exe изнутри функции, а $LASTEXITCODE не возвращает значение, которое я ожидаю от функции

4b9b3361

Ответ 1

Потому что вы не должны устанавливать такие автоматические переменные. Вы создаете локальную переменную и сворачиваете ее. Удалите строку $LASTEXITCODE = $null, и вы получите ожидаемый результат. Или вы можете сделать $global:LASTEXITCODE = $null

Ответ 2

Вы назначаете значение $LASTEXITCODE внутри области функционального теста, где оно действительно установлено. Последняя строка выводит $LASTEXITCODE как 1, поскольку вы покинули область проверки функции и значение, присвоенное $LASTEXITCODE внутри этой области, больше не представляет интереса.

Как уже указывали manojlds, вы можете просто установить переменную глобально, если вы хотите достичь этого результата.

Ответ 3

Не уверен, что мне нравится устанавливать $LASTEXITCODE напрямую... вероятно, лучше, если внутренняя система системы сделает это:

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging