我最近被赋予了通过SOAP UI连接Dynamo DB的任务,以断言我的公司API正在创建正确的内容。在尝试访问Dynamo数据库数据之后,我们已经决定通过使用Windows PowerShell的groovy脚本进行连接,以利用AWS CLI及其提供的授权。
我已经完成并配置了AWS CLI,并且能够通过电源shell按预期运行命令,例如:
$ aws dynamodb scan --table-name Accounts
$ aws dynamodb get-item --table-name Accounts --key '{\"id\":{\"S\":\"3b7e2c4a-f672-4a12-b2bc-7313b60b0a9a\"}}'
在SOAP UI中切换到groovy脚本时,第一个查询按预期工作,但第二个问题引发错误:"解析参数错误' - 键':无效的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);
我相信它可能与引用和exscapes的标记有关,但是还没有找到相关组合,我相信这是我目前对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命令中发布,但这只会返回一个不同的错误:解析参数时出错' - 键':预期:&#39 ; =',收到:'''输入:
这让我难过的原因是因为这个命令在直接转到windows powershell时按预期工作。
答案 0 :(得分:0)
您可能必须使用反引号`来反转反斜杠\
和/或双引号"
。
或者只是用反引号`char替换\
字符,因为在powershell中,转义符号是反引号而不是反斜杠......