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 не возвращает значение, которое я ожидаю из функции.


person blue18hutthutt    schedule 08.06.2012    source источник


Ответы (3)


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

person manojlds    schedule 08.06.2012

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

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

person Senfbrot    schedule 08.06.2012

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

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging
person Mark Ronollo    schedule 08.09.2016