从 java 代码执行 cmd 时出现问题

Issue while executing cmd from java code

我有一个要求,我想通过以下方式查看远程服务器上所有 运行 服务的状态 执行一些 java 程序。

为此,我尝试使用 cmd 的服务控制器功能。

当我从命令提示符执行以下命令时,它工作正常-

sc \RemoteServerName queryex 类型=服务状态=全部

但是当我尝试从 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);
    }

它returns像这样- 错误:无法识别的命令

描述: SC 是一个命令行程序,用于与 服务控制管理器和服务。

是否需要为远程服务器上的 运行 命令传递任何特殊参数? 对这些家伙有什么想法吗? 谢谢

您缺少服务器名称中的第二个 \

运行 您粘贴的命令显示的错误与您在命令 window.

中看到的错误相同

来自 sc 帮助:

DESCRIPTION: SC is a command line program used for communicating with the Service Control Manager and services.

USAGE: sc [command] [service name] ...

   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");

它应该可以正常工作。

我的输出(由于显而易见的原因不会 return 正确的结果)显示 sc 命令正常工作。

[SC] OpenSCManager FAILED 1722:

The RPC server is unavailable.