我有一个要求,我希望通过以下方式查看远程服务器上所有正在运行的服务的状态 执行一些java程序。
为此,我尝试使用cmd的服务控制器功能。
当我从命令提示符执行以下命令时,它可以正常工作 -
sc \ RemoteServerName queryex type = service state = all
但是当我尝试从java程序执行相同的命令时,它不起作用。以下是 java代码
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "sc \\RemoteServerName queryex type= service state= all");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
它返回类似这样的东西 - 错误:无法识别的命令
描述: SC是用于与之通信的命令行程序 服务控制管理器和服务。
在远程服务器上运行命令是否需要传递任何特殊参数? 对这个家伙有什么想法吗? 感谢
答案 0 :(得分:0)
您在服务器名称上缺少第二个\
。
粘贴时运行命令会显示您在命令窗口中看到的相同错误。
来自sc
帮助:
描述: SC是用于与之通信的命令行程序 服务控制管理器和服务。
USAGE: sc [命令] [服务名称] ...
The option <server> has the form "\\ServerName" Further help on commands can be obtained by typing: "sc [command]"
您的命令显示缺少斜杠sc \RemoteServerName queryex type= service state= all
将其更改为:
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "sc \\\\RemoteServerName queryex type= service state= all");
它应该可以正常工作。
我的输出(由于显而易见的原因而无法返回正确的结果)显示sc
命令正常工作。
[SC] OpenSCManager FAILED 1722:
The RPC server is unavailable.