2017-01-12 9 views
0

出力情報と詳細情報の両方を2つの異なる変数に取り込むことは可能ですか?Powershellは異なる変数の出力情報と詳細情報の両方をキャプチャします

私の要件:

私はそれだけで冗長とエラーが表示され、リッチテキストボックスを持っているPowerShellとWPFとのGUIを作成しています。

たとえば、get-dscconfiguration -verboseを実行すると、冗長ストリームはrichtextboxに送られ、そのコマンドレットの出力は、さらにmanuplationのために変数に割り当てられます。

私はこれを達成するのを手伝ってください。ありがとうございました!

-vinay

+0

の可能性のある重複した[PowerShellの:変数を分離するために、キャプチャー・プログラムのstdoutとstderr](http://stackoverflow.com/questions/24222088/powershell-capture-program-stdout-and-stderr-to-separate-変数) – sodawillow

答えて

1

1つのストリームを1つの変数にキャプチャすることはできますが、複数のストリームをキャプチャすることはできますが、複数のストリームをキャプチャした変数をファイルに読み込んで読み込んだりフィルタしたりする必要があります。たとえば、冗長出力のみをキャプチャするには、コマンドを部分式として実行します。実行すると

$VerboseOnly = $($OutputOnly= .{ 
    New-Item -ItemType Directory -Path c:\Test -Verbose 
    Remove-Item -Path c:\Test -Verbose 
    Remove-Item -Path c:\Test -Verbose 
    Write-Warning "warning" 
}) 4>&1 

これは、コンソールにエラーや警告のオブジェクトを出力しますが、詳細オブジェクトは$ VerboseOnlyに保存され、出力オブジェクトは$ OutputOnlyに保存されています。

あなたが複数のストリームだけでなく、次の例をリダイレクトすることができます示しています唯一のエラーオブジェクトがコンソールに書き込まれた

$VerboseAndWarning = $(
$OutputOnly = .{ 
    New-Item -ItemType Directory -Path c:\Test -Verbose 
    Remove-Item -Path c:\Test -Verbose 
    Remove-Item -Path c:\Test -Verbose 
    Write-Warning "warning" 
}) 4>&13>&1 

この時点で、出力System.IO.DirectoryInfoオブジェクトは$ outputOnlyであり、かつ警告メッセージと詳細メッセージは$ VerboseAndWarningにあります。 where-object句でフィルタリングすることでそれらを取り出すことができます。

$VerboseAndWarning | Where-Object {$_ -is [System.Management.Automation.WarningRecord]} 
WARNING: warning 
$VerboseAndWarning | Where-Object {$_ -is [System.Management.Automation.VerboseRecord]} 
VERBOSE: Performing operation "Create directory" on Target "Destination: C:\Test". 
VERBOSE: Performing operation "Remove Directory" on Target "C:\Test". 
+0

スティーブン、私はあなたを愛して!これは私が探していたものです。ありがとうございました! –

0

https://stackoverflow.com/a/33002914

上記のURLは、ほとんどあなたが助ける他の同様の質問への答えです。

彼はstdoutとstderrの両方をフィードし、完了したらそれらを分割します。しかし、その場で行われていません。

単にそれぞれの変数を独自の変数に保存することもできます。

関連する問題