2013-05-14 2 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 
    } 
} 

내가 확인할 수 배포 문을 쳐서 쓰기 - 호스트 출력 0, 올바르게, 아직 TaskTearDown는 여전히로 마지막 종료 코드를 감지하는 경우 삼! 이 문제를 어떻게 해결할 수 있습니까?

+2

나는'지정 $의 lastexitcode' 않을 것이다, 그것은 자동 변수입니다. 할당은 아마도 지역 변수를 생성하고'TaskTearDown'은 여전히 ​​원본을 봅니다. 어쨌든'$ lastexitcode = 0' 없이는 다른 접근법을 사용해보십시오. –

답변

9

robocopy 종료 코드 8 이하는 오류가없는 상태 코드입니다. 8 이상의 종료 코드 만 오류를 나타냅니다. here을 참조하십시오.

당신의 해체 작업이 여전히 배포 작업을 생성하는 반면, 자동 변수 $LastExitCode글로벌 변수이기 때문에 3의 종료 코드는 아마보고 이유는 추가 지역 변수 $lastexitcode 그에서 마스크 전역 변수를 작업의 범위. 비슷한 질문에 this answer에서 제안으로, $global: 접두사를 사용

$global:LastExitCode = $null 
+0

아 그것은 범위 지정 문제입니다! 감사! 아직도 아주 호화 스럽습니다. 실제로 PSake는 0을 찾고 null을 throw합니다 ... 그래서 $ global : LastExitCode = 0이 필요합니다. –