2014-01-06 85 views
1

我運行一個善變的命令,因爲水銀是不是返回0,但1psake錯誤代碼管理

一個失敗的任務時善變的回報1並不意味着它是一個錯誤,但沒有什麼做的。 根據文檔:

Returns 0 if push was successful, 1 if nothing to push. 

我該如何處理我的任務,所以當汞命令返回0或1它不會打破的回報。

這裏是失敗函數

Function Invoke-HgBookmark([string]$bookmarkname) 
{ 
    $repo = GetCredentials 
    & $hg.file bookmark -f $bookmarkname 
    Invoke-Expression "$($hg.file) push -B $bookmarkname $repo" 
    if ($LASTEXITCODE -eq 0 -Or $LASTEXITCODE -eq 1) 
    { 
     return 0 
    } 
    else 
    { 
     return -1 
    } 
} 

Psake呼喚我的功能與此代碼:

try { 
    $global:lastexitcode = 0     
    & $cmd 
    if ($lastexitcode -ne 0) { 
     throw ("Exec: " + $errorMessage) 
    } 
    break 
} 
+0

看起來你的函數試圖處理1的退出碼。函數返回'-1'還是以其他方式失敗?如果它返回'-1' - 粘貼在'Write-Host'$ LastExitCode「'中,以查看您正在獲取的退出代碼。你的'if'表達式邏輯看起來不錯。順便說一句,Invoke-Expression有什麼用?我不明白爲什麼你不能像在iex上面的行那樣調用$ hg.file。 –

+0

其實,我正在學習PowerShell ...我不需要iex。回到我的問題中,我添加了psake正在使用的代碼,並且我不能覆蓋$ lastexitcode以防hg返回1 – Swell

+0

啊,在這種情況下,請嘗試用'$ LastExitCode = x'替換'Return x'。 –

回答

3

在功能,設置$global:LastExitCode爲需要的值在退出前。您必須使用前綴global:才能修改全局變量。否則,PowerShell會執行「寫入時複製」操作並修改與該函數本地名稱相同的變量。