我需要使用Runtime.getRuntime().exec(cmd)
该数组包含一些值,如:
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参数,如:
将参数作为单独的标记传递,不带逗号:
cmd.add("-names");
cmd.add("Jon");
cmd.add("Adam");
// only "Jon" received in $names
用逗号附加标记:
cmd.add("-names")
cmd.add("Jon"
cmd.add(","
cmd.add("Adam");
// only "Jon" received in $names
通过将参数附加为以逗号分隔的字符串:
cmd.add("-names");
cmd.add("Jon, Adam");
// single string received contains "Jon, Adam"
通过将参数和逗号分隔的参数作为单个字符串附加:
cmd.add("-names Jon, Adam");
// return an error
但上述情况均无效。
更新1:
我现在知道我可以从控制台以两种方式传递参数:
test.ps1 -names Jon,Adam
test.ps1 -names ("Jon","Adam")`
我尝试传递数组:
cmd.add("-names")
cmd.add("(\"Jon\", \"Adam\")");
但这也行不通。脚本将它们作为单个字符串接收!
答案 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);