2012-06-08 18 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()函數?

這是我遇到現在的問題泛化,當我調用一個Win32 .EXE從功能和$ LASTEXITCODE內沒有返回,我在一個函數中期待值

回答

19

因爲你不應該設置這樣的自動變量。您正在創建一個局部變量並將其取消。取出$LASTEXITCODE = $null線,你會得到預期的結果。或者你也可以做$global:LASTEXITCODE = $null

+0

謝謝你,完全是有道理的。 – blue18hutthutt

4

您分配功能測試中,它實際上是設定的範圍內的值$ LASTEXITCODE。 輸出列出$ LASTEXITCODE的最後一行是1,因爲你離開了功能測試的範圍和分配到$ LASTEXITCODE裏面的值該範圍是任何不感興趣了。

正如manojlds已經指出的那樣,你可以只設置全局變量來,如果你想達到這種效果。

0

不知道我喜歡直接設置$ LASTEXITCODE ...可能更好地讓系統內部做到這一點:

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging 
相關問題