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

3 ответов


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


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

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


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

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