我正在尝试使用Java Runtime类执行PowerShell脚本,但是由于某种原因没有任何反应。我也试图将CMD输出到我的Java代码中,但是没有成功。这是我的代码:

private void connectToServer() {
    executeCmdCommand("cd C:/PSTools");// navigate to psTools directory
    executeCmdCommand("PsExec.exe //<server1> -u orgnization/user_qa -p      sdsad1212 cmd");// connect the server machine
    executeCmdCommand("powershell.exe C:/powerShell/stop-process.ps1 MainRls");// stopr service by execute powershell script
}

/**
* execute cmd commands
*/
private void executeCmdCommand(String command){
    try {
        ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", command);
        Process process = builder.start();
        BufferedReader inputStream = new BufferedReader(new InputStreamReader(process.getInputStream()));
        Report.assertOnReport(inputStream.readLine());
    } catch (IOException e) {
        e.printStackTrace();
    }
}


当我从CMD手动执行相同的命令时,服务成功终止,但是当由Java代码执行时,它什么也没做。

最佳答案

当您手动执行命令时,这些命令会起作用,因为第二个命令会在远程主机上打开一个交互式外壳程序,并且您要在远程主机上的该外壳程序中键入第三个命令。您的Java代码无法那样工作,因为它分别运行两个命令。因此,您需要直接使用PsExec运行PowerShell命令:

executeCmdCommand("PsExec.exe //<server1> -u orgnization/user_qa -p sdsad1212 C:/windows/system32/WindowsPowerShell/v1.0/powershell.exe -File C:/powerShell/stop-process.ps1 MainRls");

10-06 13:17
查看更多