运行powershell命令时出错

时间:2013-07-22 09:52:14

标签: java powershell process runtime.exec ioexception

如何使用java调用powershell命令。

  try {
        ExecuteWatchdog watchdog = new ExecuteWatchdog(20000);
        Process powerShellProcess = Runtime.getRuntime().exec(
                "powershell.exe \"D:\\testscript.ps1\"");
        if (watchdog != null) {
            watchdog.start(powerShellProcess);
        }
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(
                powerShellProcess.getInputStream()));
        String line;
        System.out.println("Output :");
        while ((line = stdInput.readLine()) != null) {
            System.out.println(line);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

注意:我映射正确的路径。

我尝试使用上面的代码,但它给出了错误,如

java.io.IOException: Cannot run program "powershell.exe": CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:431)
    at java.lang.Runtime.exec(Runtime.java:328)
    at com.powershell.PsJava.main(PsJava.java:17))

任何人都可以请你帮忙。

5 个答案:

答案 0 :(得分:1)

环境变量并不总是暴露给java编译器。您的堆栈错误只是告诉您它无法找到powershell可执行文件,因为它不会自动知道查找$ PSHOME var。

修复只是指定完整路径:
"powershell.exe"更改为"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

答案 1 :(得分:0)

您可以使用Java中的ProcessBuilder运行PowerShell命令。

ProcessBuilder builder =
    new ProcessBuilder("powershell.exe", "/c", "Get-Process");
Process p = builder.start();

答案 2 :(得分:0)

如果您的路径中有powershell可执行文件 IS ,请确保您在{{1}中不小心选择了{{1>} 特定用户名密码凭据 }} 部分。我不确定为什么,但这似乎会在我们的奴隶身上造成这个问题!

答案 3 :(得分:0)

是的,我们需要配置Powershell.exe的环境变量在路径C:\Windows\System32\WindowsPowerShell\v1.0中,然后重新启动系统。

然后,执行PowerShell命令或脚本。

答案 4 :(得分:0)

我测试了以上所有答案,但没有成功! 试试这个... 我遇到了这个问题,真是太痛苦了:))我可以这样解决这个问题:首先,我将C:\ Windows \ System32 \ WindowsPowerShell \ v1.0添加到Windows 10环境变量中的系统路径中,之后我重新启动PC,重新启动后,我创建了一个新的scala sbt项目,但我选择的是scala版本11.10和sbt版本0.0.3x而不是1.xx,它能正常工作,祝您一切顺利!