【问题标题】:ProcessBuilder removes " from the command in powershellProcessBuilder 从 powershell 的命令中删除 "
【发布时间】:2018-06-13 06:14:20
【问题描述】:

简短:我正在尝试在 ProcessBuilder 中运行命令:

public static String execute(String cmd) {
    System.out.println(cmd);
    ProcessBuilder builder = new ProcessBuilder("powershell.exe", cmd);
    StringBuilder fullStatus = new StringBuilder();
    String line = null;
    Process reg;
    builder.redirectErrorStream(true);
    try {
        reg = builder.start();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(reg.getInputStream()));
        while((line = bufferedReader.readLine()) != null) {
          fullStatus.append(line).append("\n");
        }
        reg.destroy();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    return fullStatus.toString();
}

如果我执行以下命令:

Get-WmiObject -Query " SELECT * FROM Win32_Printer WHERE Default=$true"

它会忽略我文件中的 "。

Get-WmiObject : Es wurde kein Positionsparameter gefunden, der das 参数“*”akzeptiert。在 Zeile:1 Zeichen:1 + Get-WmiObject -Query SELECT * FROM Win32_Printer WHERE Default=$true + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-WmiObject], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetWmiObjectCommand

我该如何解决这个问题?

【问题讨论】:

    标签: java powershell


    【解决方案1】:

    看起来您的 ProcessBuilder 正在从您的 cmd 参数中删除引号。您可以通过两种方式解决此问题:

    转义引号:

    public static String execute(String cmd) {
        cmd = cmd.replace('"',"\\\"")
        ...
    

    使用不需要引号的参数调用命令:

    Get-WmiObject -Class Win32_Printer -Filter { Default = True }
    

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 2017-11-20
      • 2022-12-13
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多