2016-10-21 5 views
0

Powershellホスト(stdin、さらには5つの出力ストリームのデバッグ、情報、エラーなど)に付属するさまざまなストリームの.NETオブジェクト参照を取得することに興味があります。これらをカスタム.NETタイプに渡すことに興味があります。コマンドレットではありません... 5つの出力ストリームと1つの入力ストリームを使用する.NETタイプだけです。Powershellのストリームオブジェクトへの参照を取得しますか?

私はグーグルグーグルとmsdningに多くの時間を費やしています。これらのストリームの情報を読み書きするコマンドレット以外の情報は見つからないようです。

これが不可能な場合は、関連するドキュメントへのリンクが回答になります。

更新

これまでのフィードバックのおかげで、この質問に戻ってそれを作るの遅れて申し訳ありません。

@CharlieJoyntここで考えているのは、多くのカスタム.NETタイプのエントリポイントとしてPowerShellを使用することです。これらは他のクラスライブラリやEXEにもインポートされるため、PowerShell固有のものではありません。しかし、型をホストするものは、log4netのような特定のロギングフレームワークを選択するのではなく、info/log/error/etc出力のストリームを提供します。

@PetSerAl XYの質問は何ですか?私の更新が、あなたが探している透明度を追加しない場合は、ギャップが何であるかを明確にすることができますか(:P)?

これまでのフィードバックに感謝します。

+0

私のためにXY質問のように見えます。あなたは本当に何を達成しようとしていますか? PowerShell Streamオブジェクトへの参照が必要なのはなぜだと思いますか? – PetSerAl

+0

ええ、ここで少し明確にすると、かなり面白い質問のように見えます。たとえば、* PowerShell内でこの問題を解決しようとしていますか?(たとえば、別のログファイルを別のログファイルに記録するなど)* PowerShellの環境*(カスタムホストの作成時など) –

+0

@Paul、XY質問はここでこのフォーラムの「メタ」サイトで説明します: http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

答えて

1

Register-ObjectEventコマンドレットを使用して、特定のストリームに書き込まれたデータを傍受することができました。

登録-ObjectEvent

https://technet.microsoft.com/en-us/library/hh849929.aspx

登録-ObjectEventレットは がローカルコンピュータまたは リモートコンピュータ上の.NET Frameworkオブジェクトによって生成されたイベントをサブスクライブ。サブスクライブされたイベントが発生すると、セッション内のイベントキュー に追加されます。イベントキュー内のイベントを取得するには、 Get-Eventコマンドレットを使用します。

あなたは、キューにイベント を識別するためにあなたを助けることができるイベントの プロパティ値を指定するには、登録-ObjectEventのパラメータを使用することができます。サブスクリプションされたイベントが発生し、Forwardパラメータが に設定されている場合、アクションパラメータを使用してアクション を指定して、リモートセッションをローカルセッションのイベントキューに送信することもできます。

私の場合は、$プロセスとして新しいSystem.Diagnostics.Processオブジェクトを作成していたが、そのプロセスを開始する前に、私は、例えば、ジョブとして存在する、いくつかのイベントハンドラを登録$ScriptBlockは、そのストリームからのイベントを処理し所定のスクリプトブロックである

$StdOutJob = Register-Object-Event -InputObject $Process ` 
    -EventName OutputDataReceived -Action $ScriptBlock 

...。そのスクリプトブロック内では、イベントにはいくつかの組み込み変数を経由してアクセス可能です:

アクションパラメータの値が$イベント$ EventSubscriber$送信者を含むことができ、 $ EventArgsおよび$ Args アクションスクリプトブロック にイベントに関する情報を提供する自動変数。

だからあなたのScriptBlockは$EventArgs.Dataそれで何かを行うことを取ることができます。

免責事項:私はないを持っているだけでOutputDataReceivedErrorDataReceived、あなたが言及するすべてのストリームを傍受しようとするために、このメソッドを使用していました。

+0

私はこのRegister-ObjectEventビジネスを掘り下げて、そのタスクを達成できるかどうかを見ていきます。もしそうなら、私がしたことを投稿します。 –

関連する問題