2012-03-22 4 views
1

タイトルが少し混乱していることがわかりましたが、私はそれをフレーズするより良い方法を見つけられませんでした。すべての機能が別の機能に出力を送信する方法をお探しですか?

私は数十の機能を持つPowershellスクリプトを持っています。現在、出力をフォーマットするために、すべての関数にまったく同じコードがあります。スニペットは次のとおりです。

function function1() { 
    do something... 
    output code here 
} 

function function2() { 
    do something... 
    output code here 
} 

出力コードはまったく同じです。コード重複排除のファンであるため、私は新しい機能を追加するたびに、このテンプレートコードを適用する必要があるため、これは私を狂ってしまいます。 try/catchブロックにスクリプト全体を入れて出力したオブジェクトを投げてみましたが、動作させることができませんでしたが、これはすべての関数で同じthrow文でコーディングする必要があります。

私はこれらの機能をすべてこのスクリプトに入れて、自動的に出力を別の機能に送信することができますか、それとも私はこのままで生活しなければなりませんか?あなたは関数の本体を取得し、書式設定コードと新しいボディをassignesの機能を見ることができるように

function addOutputCode { 
    param($name) 
    $oldBody = (get-item function:$name).ScriptBlock 
    $newBody = { 
     param($computer) 
     $funcOutput = . $oldBody $computer 
     # some formatting 
     $funcOutput | % { 'FORMATTED: ' + $_ } 
    }.GetNewClosure() 
    Set-Item function:$name -value $newBody 
} 

:関数がパラメータを持っていない場合は

+0

出力形式はどのようなものですか、どのように出力していますか?これらのオブジェクトはすべて同じタイプですか?おそらく、その型のオブジェクトのカスタム書式設定を実装するout- *またはwrite- *を使用するプロキシ関数ですか? – mjolinor

+0

この関数は、いくつかの要素を持つ順序付けられたハッシュテーブルを出力しています。それらはすべて同じタイプです。 –

+0

もしそれが他のスレッドに関連していたら、ハッシュテーブルがそのままテストからそのままテストに渡されるという考えがありました。それぞれのテストでもう少し追加されます。すべてのテストの終わりに、それをNew-TestResult関数にパイプし、ハッシュテーブルから構築されたオブジェクトを返します。 – mjolinor

答えて

2

は、あなたがこのシンプルなソリューションを使用することができます。あなたはそれを試すことができます、ちょうどコピー&以下のコードを貼り付けてください。

# this is your file with defined functions 
function f1 { param($c) 'this is test of ' + $c } 
function f2 { $c.Length; 'this was length of $c' } 
# now f1 and f2 would return unformatted data 
# f1 
# f2 

# add formatting code 
addOutputCode f1 
addOutputCode f2 
# now if you call f1 or f2, they return formatted data 
# f1 comp1 
# f2 comp2 
+0

これらの関数はすべて1つのパラメータを持ちます。それらは私が多くのPCに対して起動しているサービスで、起動したサービスや既存のファイルなどをチェックしています。 –

+0

変更されているので、1つのパラメータで動作します;) – stej

関連する問題