2011-05-16 9 views
5

私のpowershellプロファイルには残念ながら$ lastexitcode値が失われるカスタムpowershellプロンプトがあります。たとえば、スクリプト "fail.ps1"の内容が "exit 123"というPowerShellスクリプトがある場合、スクリプトを実行すると、$? $ lastexitcodeは0ですが、$ lastexitcodeは0です。代わりに、私のプロファイルをカスタムプロンプトでロードせずにpowershellを実行すると、fail.ps1を実行した後、$ lastexitcodeは123になります。

誰でもこの問題を見たことがありますか?プロンプトが生成されると$ lastexitcodeを保持する方法はありますか?

Posh-git、https://github.com/dahlbyk/posh-git、gitの素晴らしいpowershellプロンプトを使用すると、この問題が発生しました。

+1

あなたを何プロンプトのように見える? –

+0

プロンプトの定義に問題があると思われる場合は、両方のプロンプトで '(get-item function:prmpt).definition'を使って比較してください。 –

+0

興味深いことに、$ LastExitCodeは、ネイティブアプリケーションへの呼び出しの影響を受けるだけです。プロンプトからexeを呼び出していますか?もしそうなら、@ dahlbykの答えに行ってください。 –

答えて

4

問題は、プロンプトの開始時に$LASTEXITCODEをキャプチャし、最後にそれを復元することで解決できます。

function prompt { 
    $realLASTEXITCODE = $LASTEXITCODE 

    # ... 

    $LASTEXITCODE = $realLASTEXITCODE 
} 
+0

私はそれを試みたと思って、それは動作しませんでした、私はタイプや何かを持っている必要があります。ありがとう –

1

あなたはそれを動作させるために、これを実行する必要があります。

function prompt { 
    $realLASTEXITCODE = $global:LASTEXITCODE 

    # ... 

    $global:LASTEXITCODE = $realLASTEXITCODE 
    # cleanup 
    Remove-Variable realLASTEXITCODE 
} 
関連する問題