2013-05-14 73 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