2017-02-25 8 views
0

他のいくつかの外部サードパーティEXEユーティリティと統合されたpowershellスクリプトがあります。それぞれは独自の種類のエラーを返すだけでなく、いくつかのエラー以外のエラー出力をstderrに返します(私は間違いなく私はこれらのユーティリティを書きませんでした)。だから私は現在、各ユーティリティの出力を解析し、いくつかのキーワードマッチングを行っています。このアプローチはうまくいきますが、私はこれらのスクリプトとユーティリティを使用する際に、実際にエラーが発生した場合にさらに例外を追加する必要があると感じています。ですから、私は拡張可能なものを作成する必要があります。モジュールのような外部ファイルに追加することができる構造の可能性があります。powershellのカスタムエラー処理の改善

私はカスタムPSObjectの機能を活用してこれを行うことを考えていましたが、詳細については苦労しています。現在、各ユーティリティのための私の解析ルーチンは、次のとおりです。私はエラーではありません$ JobOut内の$ ERRTYPEにおけるキーワードの一部が含まれているいくつかのユーティリティに実行されるまで

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

は、これは非常に簡単になります。ですから、このメソッドはすぐに制御から抜け出す可能性を秘めている見ることができると私はむしろ新しいエラールールを追加するには、コアコードの編集を開始しませんよう

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

ああ。私はシェルスクリプトを実行するのに多くの時間を費やしました。何らかの理由で表記法が私に続くのです。先端に感謝します。 – todd1215

+0

もう1つのヒントは、Don Jonesが教えている方法です。作業を行うサブ関数を持つメイン関数を作成します。各サブ関数の最後に、PowerShellのデフォルトがすべて出力されるので、 '[PsCustomObject] @ {Item1 = $ Data}'形式を使用します。次に、サブ機能2は、サブ機能1からの出力をチェックし、処理を続けることができる。等々。 – user4317867

答えて

1

私はここでスイッチがうまくいくと思います。

非常に基本的ですが、非常に簡単に変更でき、拡張性も高く、スイッチへの入力に基づいてアクションを実行できます(ロギングや修復に使用することができます)。

スイッチに入力を簡単に入力し、すべてのエラーコードまたは単語などでその機能を維持できるようにする機能を作成し、必要に応じて機能を使用します。無関係なノートで

TechNet Tips on Switches

TechNet Tips on Functions

+0

switch文の良い記事です。これを使用すると、if else文の束よりも保守性が向上する可能性があります。 – todd1215

関連する問題