我遇到Java调用PowerShell脚本的问题。 这是我正在使用的测试Java程序的示例:
import java.util.*;
import java.io.*;
import java.sql.*;
import java.text.*;
public class testJava
{
public static void main (String[] args) {
StringBuffer sb = new StringBuffer();
String cmd = "";
Process proc;
int exitVal;
try {
sb = new StringBuffer();
sb.append("powershell C:\\test\\return_sth.ps1");
cmd = sb.toString();
proc = Runtime.getRuntime().exec(cmd);
proc.getOutputStream().close();
exitVal = proc.waitFor();
System.out.println("exitVal = " + exitVal);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
}
powershell脚本“return_sth.ps1”是:
exit 123
我发现在Java的变量“exitVal”中我无法获得“123”。 相反,我得到exitVal =“1”。 实际上,来自powershell脚本的所有退出代码除了0(包括负代码,如-1)在exitVal中变为“1”。
我想知道如何从powershell脚本中正确捕获Java中的退出代码。经过测试,我找到了一种可以实现目标的替代方法,但我觉得它看起来有点笨拙而且不聪明:
用
替换Java的sb.append行sb.append("powershell.exe -Command \"C:\\test\\return_sth.ps1;exit $lastexitcode\"");
我的新方式是一种方式吗?或者有一个更好,更整洁的调用方法来从PowerShell获取退出代码? 请指教,谢谢!
答案 0 :(得分:0)
如果使用java -> powershell -> script
参数,由于来自-command
分叉执行的调用链,退出代码将被吸收,但对于-File
参数,exit-code / errorlevel是直接传递给父进程。
关于,我建议您使用-file
在您的情况下正确地使用exitcode:
powershell -file C:\test\return_sth.ps1
另一方面,如果你想使用-command
参数,你的例子也很好。