2012-06-08 1 views
13

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

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()?

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

ответ

19

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

+0

Спасибо, что вполне имеет смысл. – blue18hutthutt

4

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

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

0

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

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