2017-01-12 64 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,然后在完成之后分割它们。然而这并不是在飞行中完成的。

你可以简单地把每一个保存到它自己的变量中。