Groovy Powershell и динамо-база данных AWS CLI - PullRequest
0 голосов
/ 10 мая 2018

Недавно мне было поручено подключиться к динамической БД через интерфейс SOAP, чтобы утверждать, что API моих компаний создают правильный контент.После нескольких попыток получить доступ к данным Dynamo DB, мы решили установить соединение с помощью скрипта Groovy с использованием Windows PowerShell для использования AWS CLI и его авторизации, предоставляемой Amazon.

Я прошел и настроилинтерфейс командной строки AWS и может запускать команды, как и ожидалось, через Power Shell, например:

    $ aws dynamodb scan --table-name Accounts
    $ aws dynamodb get-item --table-name Accounts --key '{\"id\":{\"S\":\"3b7e2c4a-f672-4a12-b2bc-7313b60b0a9a\"}}'

При переключении на groovy сценарии в интерфейсе SOAP первый запрос работает, как и ожидалось, но вторая проблема вызываетошибка: «Ошибка синтаксического анализа параметра --key»: недопустимый JSON: ожидаемое имя свойства заключено в двойные кавычки: строка 1, столбец 2 (символ 1) »*

Здесь приведен фрагмент кода, сложенного вместе изразличные интернет-источники, которые я использовал для запуска команды powershell:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    //Get details and Build the command
    String powerShellCommand = context.expand( '${#TestCase#PowerShellCommand}' )
    String command = "powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile  -Command \"${powerShellCommand}\""

    // Executing the command
    Process powerShellProcess = Runtime.getRuntime().exec(command);

    // Getting the results
    powerShellProcess.getOutputStream().close();
    String line;
    //-----------------------------------------------
    //Run query
            BufferedReader stdout = new BufferedReader(new InputStreamReader(
                powerShellProcess.getInputStream()));
            String jsonString = "";
                while ((line = stdout.readLine()) != null) {
                        jsonString = jsonString.concat(line);
                }
            stdout.close();
    //-----------------------------------------------
    //Error stuff:
            BufferedReader stderr = new BufferedReader(new InputStreamReader(
                    powerShellProcess.getErrorStream()));
                    while ((line = stderr.readLine()) != null) {
                            log.info(line);
                    }
            stderr.close();
    //-----------------------------------------------
    log.info(jsonString);

Я верю, что это может иметь какое-то отношение к расстановке цитат и исключений, но пока еще не нашел правильную комбинацию, яповерьте, это мой текущий вклад в powershell:

    powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile  -Command "aws dynamodb get-item --table-name Platform.Accounts --key '{\"id\":{\"S\":\"3b7e2c4a-f672-4a12-b2bc-7313b60b0a9a\"}}'"

Я даже пытался изменитьверсия кода выше, где я бы опубликовал только команду AWS, но это просто возвращает различную ошибку: Ошибка разбора параметра '--key': ожидается: '=', получено: '' для ввода:

Причина, по которой меня это озадачило, заключается в том, что эта команда работает, как и ожидалось, при переходе непосредственно к windows powershell.

1 Ответ

0 голосов
/ 22 мая 2018

Вы, вероятно, должны экранировать обратную косую черту \ и / или двойные кавычки " с обратной косой чертой `.

Или просто заменить символ \ символом backtick `char, потому что в escape-коде powershell символ обратного удара, а не обратный слеш ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...