2017-02-25 42 views
0

因此,我有一個與其他幾個外部第三方EXE實用程序集成的powershell腳本。每一個返回它自己的錯誤以及一些返回非錯誤相關的輸出到stderr(是的設計很糟糕,我知道,我沒有寫這些實用程序)。所以我目前正在做的是解析每個工具的輸出並做一些關鍵字匹配。這種方法確實有效,但我覺得在我使用這些腳本和實用程序時,我必須爲錯誤實際添加更多例外。所以我需要創建可擴展的東西,可能是一種我可以添加到外部文件(如模塊)的結構。爲powershell提供更好的自定義錯誤處理

我正在考慮利用自定義PSObject的功能來完成這項工作,但我正在努力解決細節問題。目前我對每個工具分析例程是:

foreach($errtype in {'error','fail','exception'}) 
{ 
    if($JobOut -match $errtype){ $Status = 'Failure' } 
    else if($JobOut -match 'Warning'){$Status = 'Warning' } 
    else { $Status = 'Success' } 
} 

所以,直到我碰到一些實用工具,包含一些關鍵字在$ JobOut內$ errtype這是不是一個錯誤,這看起來非常簡單。所以現在我有一些例外添加到邏輯:

foreach($errtype in {'error','fail','exception'}) 
{ 
    if($JobOut -match 'error' -and(-not($JobOut -match 'Error Log' } 
    elseif($JobOut -match $errtype){ $Status = 'Failure' } 
    else if($JobOut -match 'Warning'){$Status = 'Warning' } 
    else { $Status = 'Success' } 
} 

所以你可以看到這種方法很快有失控的可能,我寧可不要開始編輯的核心代碼中添加一個新的錯誤規則每次遇到新的錯誤。

有沒有辦法爲每個包含邏輯錯誤的實用程序創建錯誤結構。一些容易添加新規則的東西?

任何與此有關的幫助真的很感激。

+0

在一個不相關的音符,'{ '錯誤', '失敗', '例外'}'是一個腳本塊其中,作爲一個新的範圍,是比較昂貴的創建。在這種特殊情況下,根本不需要花括號。 – wOxxOm

+0

好的。我花了很多時間來完成shell腳本,出於某種原因,這些符號一直跟着我。謝謝你的提示。 – todd1215

+0

另一個提示是關注Don Jones教授的做法。使用執行工作的子功能創建主功能。在每個子函數的末尾,由於PowerShell的默認設置是捕獲所有輸出,因此使用'[PsCustomObject] @ {Item1 = $ Data}'格式。然後子功能2可以檢查來自子功能1的輸出並繼續處理。等等。 – user4317867

回答

1

我認爲一個開關在這裏可以很好地完成。

這是非常基本的,但可以很容易地修改和高度可擴展,我喜歡你可以有一個基於交換機的輸入,可用於記錄或補救的行動。

創建一個功能,允許您輕鬆地爲開關提供輸入,然後用所有錯誤代碼或單詞等來維護該功能,然後在需要的地方簡單地使用該功能。

TechNet Tips on Switches

TechNet Tips on Functions

+0

關於switch語句的好文章。使用它可能比一堆if else語句更易於維護。 – todd1215