16

こんにちは私は次のコードスニペットでいくつかの奇妙な動作に気づいています

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

test()関数内で$ LASTEXITCODEが設定されていないのはなぜですか?

これは、関数内からWin32 .exeを呼び出し、$ LASTEXITCODEが関数内から期待する値を返さない場合に、現在発生している問題の一般化です。

4

3 に答える 3

28

そのような自動変数を設定することは想定されていないからです。ローカル変数を作成して無効にしています。行を削除する$LASTEXITCODE = $nullと、期待どおりの結果が得られます。またはあなたはすることができます$global:LASTEXITCODE = $null

于 2012-06-08T06:16:18.520 に答える
4

実際に設定されている関数テストのスコープ内で$LASTEXITCODEに値を割り当てています。出力の最後の行には、$ LASTEXITCODEが1としてリストされています。これは、関数テストのスコープを残し、そのスコープ内で$LASTEXITCODEに割り当てられた値はもう関心がないためです。

manojldsがすでに指摘しているように、その結​​果を達成したい場合は、変数をグローバルに設定するだけです。

于 2012-06-08T15:23:00.067 に答える
2

$LASTEXITCODEを直接設定するのが好きかどうかはわかりません...おそらくシステム内部に設定させる方が良いでしょう:

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging
于 2016-09-08T22:04:01.773 に答える