2017-01-12 98 views
0

將輸出和詳細信息捕獲到兩個不同變量中是否可行?Powershell在不同變量中捕獲輸出和詳細信息

我的要求:

我創建使用PowerShell和WPF GUI的地方有一個RichTextBox其中僅顯示冗長和錯誤。

例如,如果我執行get-dscconfiguration -verbose,詳細流應該到richtextbox並且該cmdlet的輸出應該被分配給變量以便進一步manuplation。

請幫我做到這一點。謝謝!

-vinay

+0

的可能的複製[Powershell的:捕獲節目輸出和錯誤給獨立的變量(http://stackoverflow.com/questions/24222088/powershell-capture-program-stdout-and-stderr-to-separate-變數) – sodawillow

回答

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

上面的網址是回答另一個類似的問題,那很可能會幫助你。

他同時提供stdout和stderr,然後在完成之後分割它們。然而這並不是在飛行中完成的。

你可以簡單地把每一個保存到它自己的變量中。