2013-05-14 24 views
7

Robocopy sẽ thoát với mã trên 0 và vẫn có thể không phải là lỗi. PSake phát hiện bất cứ điều gì trên 0 như là một thất bại và không xây dựng. Điều này là tốt, nhưng làm thế nào đến này vẫn thất bại:Psake và robocopy không

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

tôi có thể xác minh rằng Triển khai lệnh if là hit và kết quả đầu ra Write-Host 0, một cách chính xác, nhưng các TaskTearDown vẫn phát hiện các mã xuất cuối cùng như 3! Làm thế nào để sửa lỗi này?

+2

tôi sẽ không gán '$ lastexitcode', nó là một biến tự động. Chuyển nhượng có lẽ tạo ra một biến địa phương và 'TaskTearDown' vẫn thấy bản gốc. Trong mọi trường hợp, hãy thử sử dụng một cách tiếp cận khác mà không có '$ lastexitcode = 0'. –

Trả lời

9

robocopy mã thoát dưới 8 là mã trạng thái không phải lỗi. Chỉ các mã thoát từ 8 trở lên mới báo lỗi. Xem here.

Lý do tại sao công việc teardown của bạn vẫn báo cáo mã trả về 3 có lẽ là vì tự động biến $LastExitCode là một thế giới biến , trong khi nhiệm vụ triển khai của bạn tạo ra thêm địa phương biến $lastexitcode rằng mặt nạ biến toàn cầu trong phạm vi nhiệm vụ. Như đã đề cập trong this answer cho một câu hỏi tương tự, sử dụng tiền tố $global::

$global:LastExitCode = $null 
+0

Ah nó là một vấn đề phạm vi! Cảm ơn! Vẫn còn rất mới để posh. PSake thực sự tìm kiếm 0 và sẽ ném vào null ... vì vậy $ toàn cầu: LastExitCode = 0 là những gì tôi cần. –

Các vấn đề liên quan