2013-05-14 72 views
7

Robocopy将以大于0的代码退出,但仍可能不会失败。 PSake检测到任何超过0的故障,并失败构建。这是好的,但如何走到这仍然失败:Psake和robocopy失败

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 
    } 
} 

我可以验证部署if语句被击中而写主机输出0,正确的,但在TaskTearDown仍然检测到最后的退出代码3!我该如何解决?

+2

我不会指定'$ lastexitcode',它是一个自动变量。赋值可能会创建一个局部变量,“TaskTearDown”仍然会看到原始的变量。在任何情况下都可以尝试使用不同的方法,而不要使用'$ lastexitcode = 0'。 – 2013-05-14 04:48:11

回答

9

robocopy 8位以下的退出码是非错误状态码。只有8及以上的退出代码表明有错误。见here

为什么你的拆卸任务仍然报告的退出代码3时,可能是因为自动变量$LastExitCode全球变量,而你的部署任务创建的原因附加当地变量$lastexitcode掩盖在全局变量任务的范围。正如this answer建议类似的问题,使用$global:前缀:

$global:LastExitCode = $null 
+0

啊这是一个范围问题!谢谢!对豪华来说还是很新的。 PSake实际上查找0并且会抛出null ...所以$ global:LastExitCode = 0是我所需要的。 – 2013-05-14 13:36:46