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

robocopy低于 8 的退出代码是非错误状态代码。只有 8 及以上的退出代码表示错误。见这里

您的拆卸任务仍然报告退出代码 3 的原因可能是因为自动变量$LastExitCode全局变量,而您的部署任务创建了一个额外的局部变量$lastexitcode,该变量在任务范围内屏蔽了全局变量。正如this answer to a similar question中所建议的,使用$global:前缀:

$global:LastExitCode = $null
于 2013-05-14T13:21:51.163 回答