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

前端之家收集整理的这篇文章主要介绍了Windows – Powershell:捕获程序stdout和stderr以分隔变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在一次运行中,是否可以将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中的错误

原文链接:https://www.f2er.com/windows/372303.html

猜你在找的Windows相关文章