日期:2014-05-20  浏览次数:20714 次

psexec在JVM中无法获取交互信息,高手进来看看。
本帖最后由 peng_hao1988 于 2012-11-14 09:52:24 编辑 psexec介绍见:http://baike.baidu.com/view/555225.htm

运行环境win2003,JDK1.6.

在DOS下运行命令:
    cmd /c psexec \\10.67.192.212 -u china\liuxhwfe -p xxxxxx cmd /c dir D:\

注:10.67.192.212这是本机IP,psexec已添加至环境变量中。即通过psexec通过指定的用户远程访问本机并执行 dir D:\命令。在控制台会得到D:\下的目录信息。

以上效果都是按照我的预定计划想要的结果,通过程序真确实现。但是现在使用java来运行该命令的时候就无法获取到D:\下的信息了。代码如下:

public static void main(String[] args) throws Exception {
String cmd = "cmd /c psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";
Process pro = Runtime.getRuntime().exec(cmd);
BufferedReader read = new BufferedReader(new InputStreamReader(pro.getInputStream(),"GBK"));
String line = null;
while((line = read.readLine()) != null){
System.out.println(line);
}
pro.destroy();
}


有没有人用过pstools工具?psexec问什么会出现这种情况?不知道是JVM的问题还是pstools的问题,如果不使用psexec命令,直接运行cmd /c dir D:\ 这个命令是可以的,问题就出在psexec这个命令上,它是通过远程执行命令,并将交互信息返回给当前控制台中,所以在DOS界面中可以看到这些交互信息的,但是JVM为何就获取不到呢?程序在while循环read.readLine()这里执行一次,即读取到第一行后就不向下执行,一直卡在这里。
------最佳解决方案--------------------
String cmd = "cmd /c psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";
改为
String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";
------其他解决方案--------------------
String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\"; 
这种挑中dos命令的语句最好不要写在一起,先打开界面,再慢慢append命令,这样不会出错。
打开后输入psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\看能执行部,不行的话再修改
------其他解决方案--------------------
 find \"psexec.exe\"",null,new File("C:\\WINDOWS\\system32"));
BufferedReader rs = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK"));
String line = null;
while((line = rs.readLine()) != null){
System.out.println(line);
}

这段代码在单独的java类中运行可以,但是放到JBOSS中运行就无法打印信息了。到底为什么?
------其他解决方案--------------------
引用:
String cmd = "cmd /c psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\";
改为
String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c d……

谢谢回复!
这样弹出了MSDOS界面了,而且结果也没法直接获取到程序中吧,需要写入文件再读取文件中,不过看到希望了,非常感谢!
------其他解决方案--------------------
引用:
String cmd = "cmd /c start psexec \\\\10.67.192.212 -u china\\liuxhwfe -p xxxxxx cmd /c dir D:\\"; 
这种挑中dos命令的语句最好不要写在一起,先打开界面,再慢慢append命令,这样不会出错。
打开后输入psexec \\\\10.67.192.212 -u china……

一步步来执行是可以,但是每一步都需要认为参与,这样在程序中不好操作呀!还有你刚刚的建议我试了,弹出了MSDOS界面,在界面中结果都出来了,但是无法获取到程序,也无法将结果写入文件,我使用这样修改命令的