使用Runtime.exec(...)

时间:2016-10-30 18:08:30

标签: java arrays powershell parameters parameter-passing

我需要使用Runtime.getRuntime().exec(cmd)

将字符串数组作为参数传递给Java中的PowerShell脚本

该数组包含一些值,如:

String[] users = new String[] {"Jon", "Adam"};

和PowerShell脚本test.ps1

param(
  # ... other parameters defined here
  [parameter(Mandatory=$false)]
  [string[]] $names
)

# the rest of the script

传递该数组的正确方法是什么?

注意:

我尝试传递cmd参数,如:

  1. 将参数作为单独的标记传递,不带逗号:

    cmd.add("-names");
    cmd.add("Jon");
    cmd.add("Adam");
    // only "Jon" received in $names
    
  2. 用逗号附加标记:

    cmd.add("-names")
    cmd.add("Jon"
    cmd.add(","
    cmd.add("Adam");
    // only "Jon" received in $names
    
  3. 通过将参数附加为以逗号分隔的字符串:

    cmd.add("-names");
    cmd.add("Jon, Adam");
    // single string received contains "Jon, Adam"
    
  4. 通过将参数和逗号分隔的参数作为单个字符串附加:

    cmd.add("-names Jon, Adam");
    // return an error
    
  5. 但上述情况均无效。

    更新1:

    我现在知道我可以从控制台以两种方式传递参数:

    test.ps1 -names Jon,Adam
    test.ps1 -names ("Jon","Adam")`
    

    我尝试传递数组:

    cmd.add("-names")
    cmd.add("(\"Jon\", \"Adam\")");
    

    但这也行不通。脚本将它们作为单个字符串接收!

1 个答案:

答案 0 :(得分:0)

你需要引用两次参数。我的Java有点生疏,但我认为应该这样做:

String[] users = new String[] {"Jon", "Adam"};
String script = "C:/path/to/your.ps1"
String cmd = "powershell.exe " + script + " -names " +
             "\"'" + String.join("'\",\"'", users) + "'\"";
Process proc = Runtime.getRuntime().exec(cmd);