2017-08-04 14 views
0

異なる条件に応じて異なるコマンド(実行可能ファイル、バットまたはコマンドレット)を呼び出す自動化スクリプトを実行しようとしています。これらのコマンドは、いくつかのログ行と進捗状況を出力します。Powershellが静的メソッド内で式出力を呼び出す

クラスを使用してコードの再利用性を向上させようとしています。しかし、私はクラスのメソッドの内部からこれらを呼び出すときにコマンドの出力を得ることができません。このコードを使用して、例えば

Class SomeClass 
{ 
    static [void] CallSomeExe() 
    { 
     & "Path\To\SomeExe.exe" args 
    } 
} 

`& "Path\To\SomeExe.exe" args` # Shows command output in shell 

`[Utils]::CallSomeExe()` # Doesn't show any output in shell 

私は直接私の主な機能(& "Path\To\SomeExe.exe" args)でコマンドを呼び出す場合EXEからの出力は、シェルに表示されますが、私は、静的メソッドを呼び出した場合主な機能([Utils]::CallSomeExe())では、出力は表示されません。

ログを表示するソリューションは、呼び出し結果($out = & "Path\To\SomeExe.exe" args)をキャプチャしてmain関数に返します。しかし、一般的に、プロセスが遅く、進行状況が表示されるため、呼び出しが終了したときにすべての出力を待つのではなく、ストリーム情報を優先します。

これは関数内では動作しますが、クラス内では動作しないので、私は混乱します。

静的メソッドから呼び出すときに出力を表示させる方法はありますか?

答えて

0

出力に関しては、クラスはより伝統的な構造に従います。出力タイプを定義し、明示的に戻る必要があります。

Class SomeClass 
{ 
    static [string[]] CallSomeExe() 
    { 
     return & "Path\To\SomeExe.exe" args 
    } 
} 

元のスクリプトの[void]は、出力が返されないことを示します。

+0

私はこれが私の提案した解決策だと私は考えています。なぜなら、何かをコンパイルしてカスタム出力、警告、エラーを書き込むコマンドを呼び出すと、出力をライブで見たいからです。私の場合の解決策ではなく、完全な出力を見るために5〜10分待ちます。 – ccarvalheiro

関連する問題