如何通过java在执行cmd时输入密码
我想编写一个java程序来检索在不同服务器上运行的所有服务的状态(大约20个)。为此,我使用SC命令,我可以使用java程序来实现。但是现在我陷入了这样一种情况:我想使用RUNAS以不同的用户身份运行SC命令,我面临的问题是,一旦命令第一次执行,我就无法输入密码。以下是我正在使用的代码:-如何通过java在执行cmd时输入密码,java,cmd,runas,Java,Cmd,Runas,我想编写一个java程序来检索在不同服务器上运行的所有服务的状态(大约20个)。为此,我使用SC命令,我可以使用java程序来实现。但是现在我陷入了这样一种情况:我想使用RUNAS以不同的用户身份运行SC命令,我面临的问题是,一旦命令第一次执行,我就无法输入密码。以下是我正在使用的代码:- String[] command = new String[3]; command[0] = "cmd"; command[1] = "/c";
String[] command = new String[3];
command[0] = "cmd";
command[1] = "/c";
command[2] = "runas /noprofile /user:domain\\admin \"sc \\\\serverName queryex type= service state= all\"";
Process p = Runtime.getRuntime().exec(command);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(p.getOutputStream())), true);
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = reader.readLine();
while (line != null) {
new PrintWriter(p.getOutputStream(),true).println("AdminPassword");
System.out.println(line);
line = reader.readLine();
}
BufferedReader stdInput = new BufferedReader(newInputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String Input;
while ((Input = stdInput.readLine()) != null) {
System.out.println(Input);
}
String Error;
while ((Error = stdError.readLine()) != null) {
System.out.println(Error);
}
但我无法打印所有服务的状态。我不确定在提供密码后是否需要捕获其他流
有什么帮助吗
感谢在的while(line!=null)
循环中,您可以为阅读的每一行打开一个新的PrintWriter。您向这些写入程序打印管理员密码,但从不关闭或刷新它们
尝试上面创建的PrintWriter编写器
,并在写入密码后执行flush()
操作,否则它仍将位于缓冲区中
您还可以在进程的inputStream上创建几个可能相互干扰的BufferedReader
所以:只创建一个reader resp。编写程序的inputStream、errorStream和outputStream。Hi Thomos,感谢您的回复,我已将printwriter代码带出循环(之前)并刷新和关闭,但结果仍然相同。安全问题可能会影响您,这里的大多数答案可能是:如果您通过命令行提供凭据,在使用任务管理器或类似工具查看流程列表时,它们可能以纯文本形式提供。