Psake和robocopy失败

时间:2013-05-14 01:41:56

标签: powershell robocopy psake

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!我该如何解决?

1 个答案:

答案 0 :(得分:10)

低于8的

robocopy退出代码是非错误状态代码。只有8及以上的退出代码表示错误。请参阅here

您的拆卸任务仍然报告退出代码为3的原因可能是因为自动变量$LastExitCode全局变量,而您的部署任务会创建一个额外的本地变量$lastexitcode,用于屏蔽任务范围内的全局变量。正如this answer中对类似问题的建议,请使用$global:前缀:

$global:LastExitCode = $null