加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows – Powershell:捕获程序stdout和stderr以分隔变量

发布时间:2020-12-13 20:50:03 所属栏目:Windows 来源:网络整理
导读:在一次运行中,是否可以将stdout从外部程序重定向到外部程序中的变量和stderr? 例如: $global:ERRORS = @(); $global:PROGERR = @(); function test(){ # Can we redirect errors to $PROGERR here,leaving stdout for $OUTPUT? $OUTPUT = ( myprogram.exe
在一次运行中,是否可以将stdout从外部程序重定向到外部程序中的变量和stderr?

例如:

$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!";
 }

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

最简单的方法是使用stderr输出文件,例如:
$output = & myprogram.exe 'argv[0]','argv[1]' 2>stderr.txt
$err = get-content stderr.txt
if ($LastExitCode -ne 0) { ... handle error ... }

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读