2013-05-14 9 views
7

Robocopy zakończy działanie z kodem powyżej 0 i nadal prawdopodobnie nie będzie awarią. PSake wykrywa wszystko powyżej 0 jako błąd i kończy się niepowodzeniem. To jest w porządku, ale dlaczego ten nadal zawiedzie:Awaria programu Psake i 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 
    } 
} 

mogę sprawdzić, czy Deploy if jest trafiony i wyjścia Write-Host 0, poprawnie, jednak TaskTearDown nadal wykrywa ostatni kod wyjścia jako 3! Jak to naprawić?

+2

Nie chciałbym przypisać '$ lastexitcode', to zmienna automatyczna. Assignment prawdopodobnie tworzy zmienną lokalną, a 'TaskTearDown' nadal widzi oryginał. W każdym przypadku spróbuj zastosować inne podejście bez '$ lastexitcode = 0'. –

Odpowiedz

9

robocopy kody wyjścia poniżej 8 to kody statusu innego niż błąd. Tylko kody wyjścia 8 i wyższe oznaczają błąd. Zobacz here.

Powodem zadanie porzuca nadal zgłasza kod wyjścia z 3 to prawdopodobnie dlatego, że automatyczna zmienna $LastExitCode jest globalnym zmienna , natomiast zadanie wdrożyć tworzy dodatkowy lokalny zmienna $lastexitcode że maski zmiennej globalnej w zakres zadania. Jak zasugerowano w this answer z podobnym pytaniem, użyj prefiksu $global::

$global:LastExitCode = $null 
+0

Ah, to kwestia dotycząca zakresu! Dzięki! Nadal bardzo nowy w eleganckim stylu. PSake faktycznie szuka 0 i wrzuci null ... więc $ global: LastExitCode = 0 jest tym, czego potrzebuję. –