2015-08-29 39 views
1

我剛開始學習Git和Powershell,並嘗試創建一個不復雜的PS腳本來同步Git中的分支。在PowerShell中運行git命令時捕獲異常

我想捕捉在PowerShell中執行git命令期間可能發生的異常。

這裏是從我的代碼,在那裏我嘗試使用標準的try/catch方法的摘錄:

try { git reset --hard origin/master } 
    catch { 

       LogMessage ("Failure on syncing files from the GitHub") 
       LogMessage $_.Exception.Message; 
       Return 

      } 

的LogMessage是在文件輸出異常的功能。我使用Posh-Git來運行腳本。

由於某些原因,這不起作用。 catch沒有收集異常,return命令沒有執行並且腳本仍在運行。

我錯過了什麼?

在此先感謝,祝您有美好的一天。

+0

那麼,你是否證實你的腳本實際上*不會*進入catch塊,通過打印一個簡單的消息到控制檯或類似的東西? – stakx

+0

設置錯誤停止。 –

+0

是的,我檢查發現異常時腳本沒有進入catch塊。看起來git異常不是由PowerShell處理的。 – Andrey

回答

0

你必須得到git的可執行文件的返回碼,提高例外,如果你希望(但爲什麼你會?!)

試運行git後檢查$LASTEXITCODE varialbe。對於不同的錯誤,它應該爲0,否則應爲0。

+0

是的,如果我將git作爲外部進程運行,則使用LASTEXITCODE的方法將起作用。以下是代碼的摘錄。但是$ _.Exception.Message變量沒有填充Git返回的異常消息。我可以通過Git功能單獨記錄git異常,並在存儲PowerShell日誌的同一文件中記錄異常,但我正在尋找更好的方法(如果存在)。無論如何,謝謝你的迴應! – Andrey

+0

這裏是LASTERRORCODE使用所述提取物: cmd.exe的/ C GIT中RESET1 --hard原點/主> $文件名 如果($ LastExitCode -ne 0){ \t \t \t的LogMessage(「失敗從同步文件GitHub「) LogMessage $ _; 返回 } – Andrey