【问题标题】:How to run the following Powershell command in java?如何在java中运行以下Powershell命令?
【发布时间】:2019-05-15 19:59:03
【问题描述】:

我正在尝试运行一个启动 tomcat 服务的 powershell 命令。当前,当直接通过 windows powershell 执行该命令时,该命令运行良好。但是,如果我从 java 运行相同的命令,我会得到错误提示

Start-Process:找不到接受参数“net”的位置参数。

我的 powershell 命令是:

Start-Process -verb runas cmd -ArgumentList "/k net start Tomcat7"

我的java代码:

final String PS_COMMAND = " powershell.exe  Start-Process -verb runas cmd -ArgumentList /k net start Tomcat7   " ;
Process p=  Runtime.getRuntime().exec(PS_COMMAND);
 BufferedReader BR=new BufferedReader(new InputStreamReader(p.getInputStream()));
             String l;
             while((l=BR.readLine()) != null){
                 System.out.print(l);
             }

【问题讨论】:

  • 使用 ProcessBuilder,而不是 Runtime.exec。确保你传递了六个字符串。
  • @Alfabravo 在上一版中,有价值的信息似乎丢失了,这是故意的吗?
  • 我已经编辑并放回了java代码!!
  • @VGR 如何使用流程构建器实现这一目标??
  • @lalo 不!我想我们是同时编辑的。我刚刚格式化了 PS 命令和错误消息,但是在我编辑时添加了 java 代码并且它丢失了。很抱歉!

标签: java powershell cmd


【解决方案1】:

Runtime.exec 已过时。请改用ProcessBuilder

ProcessBuilder builder = new ProcessBuilder("powershell.exe",
    "Start-Process", "-verb", "runas", "cmd", "-ArgumentList", "/k net start Tomcat7");
Process p = builder.inheritIO().start();
int exitCode = p.waitFor();

inheritIO()的调用将使进程的输出显示在Java程序的输出中,因此无需读取和打印进程的InputStream。

【讨论】:

  • 我们还需要添加powershell.exe吗??
  • iam 仍然收到错误:Start-Process:找不到接受参数“net”的位置参数。
  • 这个有最低 Java 版本可以运行吗?
  • 我刚刚注意到我忘记了 powershell.exe 参数。相应地更新了答案。
  • @Alfabravo 正如我链接到的文档所述,ProcessBuilder 自 Java 1.5 以来一直是 Java SE 的一部分。
猜你喜欢
  • 1970-01-01
  • 2021-01-08
  • 2021-12-16
  • 1970-01-01
  • 2023-04-06
  • 2014-09-16
  • 2018-04-21
  • 2011-03-02
  • 2015-03-12
相关资源
最近更新 更多