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