如何在C#中访问PowerShell标准错误输出?

时间:2014-08-01 19:18:18

标签: c# powershell

我知道Invoke-MyCmd会抛出错误并将消息写入标准错误。

让我们说这是一行调用这样的Java程序:

function Invoke-MyCmd
{
  java Error
}

Error.java只是打印一条错误消息并退出:

import java.io.*;
public class Error {
  public static void main(String[] args) {
    System.err.println("Hello, error!");
  }
}

我正在调用C#中的Invoke-MyCmd,如下所示:

PowerShell ps = PowerShell.Create();
.
.
.
ps.AddCommand("Invoke-MyCmd");
Collection<PSObject> output = ps.Invoke();

我假设错误文本是因为它来自Java而不是直接来自Invoke-MyCmd,因此不会显示在ps.Streams.Error中。我想知道是否有另一种方法可以从C#读取错误输出。

1 个答案:

答案 0 :(得分:2)

我使用this blog作为参考,公然复制/粘贴此答案

由于这是由PowerShell运行的本机可执行文件,因此您需要将错误代码转换为异常,如下所示:

'Starting script...' | Write-Verbose
$ErrorActionPreference = 'Stop'
java Thing
if ($LastExitCode -ne 0) { 
    throw 'An error has occurred...' 
}
'Finished script' | Write-Verbose

发生错误时,您的java应用程序也应返回非零值。

import java.io.*;
public class Error {
  public static void main(String[] args) {
    System.err.println("Hello, error!");
    return 1;
  }
}