Powershell:捕获程序stdout和stderr以分隔变量 [英] Powershell: Capture program stdout and stderr to separate variables

查看:575
本文介绍了Powershell:捕获程序stdout和stderr以分隔变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一次运行中,可以将stdout从外部程序重定向到变量,stderr从外部程序重定向到另一个变量。

Is it possible to redirect stdout from an external program to a variable and stderr from external programs to another variable in one run?

例如:

 $global:ERRORS = @();
 $global:PROGERR = @();

 function test(){
      # Can we redirect errors to $PROGERR here, leaving stdout for $OUTPUT?
      $OUTPUT = (& myprogram.exe 'argv[0]', 'argv[1]');

      if ( $OUTPUT | select-string -Pattern "foo" ) {
           # do stuff
      } else {
           $global:ERRORS += "test(): oh noes! 'foo' missing!";
      }
 }

 test;
 if ( @($global:ERRORS).length -gt 0 ) {
      Write-Host "Script specific error occurred";
      foreach ( $err in $global:ERRORS ) {
           $host.ui.WriteErrorLine("err: $err");
      }
 } else {
      Write-Host "Script ran fine!";
 }

 if ( @($global:PROGERR).length -gt 0 ) {
      # do stuff
 } else {
      Write-Host "External program ran fine!";
 }

一个无聊的例子,但我想知道是否可能?

A dull example however I am wondering if that is possible?

推荐答案

最简单的方法是使用stderr输出的文件,例如:

The easiest way to do this is to use a file for the stderr output e.g.:

$output = & myprogram.exe 'argv[0]', 'argv[1]' 2>stderr.txt
$err = get-content stderr.txt
if ($LastExitCode -ne 0) { ... handle error ... }



我还将使用$ LastExitCode来检查本地控制台exes的错误。

I would also use $LastExitCode to check for errors from native console exes.

这篇关于Powershell:捕获程序stdout和stderr以分隔变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆