java 调用 powershell 的问题


PowerShell交流中心java 调用 powershell 的问题
0
yang416667164 asked 9 年 ago

1、首先我本地有一个test.ps1的powershell文件,内容为(只是为了输出传进来的参数):

For($i=0;$i -lt $args.Count; $i++)
{
Write-Host “parameter $i : $($args[$i])”
}

2、然后我的java代码如下:
private void exeCmd() {
InputStream in = null;
BufferedReader reader = null;
try {
String cmd = “cmd /c powershell D:/test.ps1 p1 p2”;
Process p = Runtime.getRuntime().exec(cmd);
in = p.getInputStream();
reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println(“out put end —“);
p.waitFor();
p.destroy();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

执行结果:
parameter 0 : p1
parameter 1 : p2

没有输出out put end —,也就是说进程卡在 while里面了。后面所有内容都中断了。求大神帮忙。

0 Answers
1
Mooser Lee 管理员 answered 9 年 ago

没有用java调用过powershell,但是肯定和其他程序一样,主要是输入和输出重定向问题。
我给的建议是不要用cmd调用powershell,这样跨了两个控制台,不好调试。另外也可以参见我用C#控制台程序调用的例子。输出输入重定向
 

yang416667164 replied 9 年 ago

我已经找到解决方案了:Process p = Runtime.getRuntime().exec(cmd);p.getOutputStream().close();//加上这句即可

刘军Shawn replied 6 年 ago

我用上面的代码执行周后只打印了“out put end —”,没有走进循环啊 ,这是为什么