我知道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#读取错误输出。
答案 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;
}
}