8

Robocopy は 0 より大きいコードで終了しますが、それでも失敗しない可能性があります。PSake は 0 を超えるものをエラーとして検出し、ビルドに失敗します。これは問題ありませんが、なぜこれでも失敗するのですか:

task Deploy {    
        robocopy $source $dest /NP /S /XO /NFL /NDL /NJH /NJS | Out-Default

    if ($lastexitcode -eq 3)
    {
       Write-Host "Got Here"
       $lastexitcode = 0       
    }

    Write-Host "Deploy local complete"
    Write-Host $lastexitcode
}

TaskTearDown {  
    if ($LastExitCode -ne 0) {
        write-host "Build failed"
        exit 1
    }
}

Deploy if ステートメントがヒットし、Write-Host が 0 を正しく出力することを確認できますが、TaskTearDown は最後の終了コードを 3 として検出します! これを修正するにはどうすればよいですか?

4

1 に答える 1

10

robocopy8 未満の終了コードは、エラー以外のステータス コードです。8 以上の終了コードのみがエラーを示します。ここを参照してください。

ティアダウン タスクがまだ終了コード 3 を報告する理由は、おそらく自動変数$LastExitCodeグローバル変数であるのに対し、デプロイ タスクはタスクのスコープ内でグローバル変数をマスクする追加のローカル変数を作成するためです。同様の質問に対するこの回答$lastexitcodeで提案されているように、次の接頭辞を使用します。$global:

$global:LastExitCode = $null
于 2013-05-14T13:21:51.163 に答える