2012-06-08 17 views
13

こんにちは、私は次のコードスニペットといくつかの奇妙な行動に気付いてい

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

test 
Write-Host "Last exitcode: $LASTEXITCODE" 

これからの出力は$ LASTEXITCODEが内に設定されていないのはなぜ

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

ですテスト()関数?

この

は、私は機能と$ LASTEXITCODE内からのWin32 .EXEを呼び出すとき、私は関数内から期待していた値を返していない、私が今抱えている問題を一般化したものである

答えて

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