将带有空间的参数传递到AWS CLI中

时间:2019-09-23 02:05:43

标签: json powershell aws-cli

我正在尝试将带有空格的pass参数传递给mock.Setup(m => m.Log<object>(It.IsAny<LogLevel>(),It.IsAny<EventId>(),It.IsAny<object>(),It.IsAny<Exception>(),It.IsAny<Func<object, Exception,string>>())) .Callback<LogLevel, EventId, object, Exception, Func<object, Exception, string>>((logLevel, eventId, obj, exception, func) => { string msg = func.Invoke(obj, exception); Console.WriteLine(msg); }); aws cli。

问题是我的参数有空格。我正在使用Powershell编写脚本。

下面是我的参数示例

aws cloudformation create-stack

这将返回

 $JsonParameter = '[{"ParameterKey":"name","ParameterValue":"John"},{"ParameterKey":"Occupation","ParameterValue":"Test Engineer"}]'| ConvertTo-Json

cli命令是

"[{\"ParameterKey\":\"name\",\"ParameterValue\":\"John\"},{\"ParameterKey\":\"Occupation\",\"ParameterValue\":\"Test Engineer\"}]"

错误消失了

aws cloudformation create-stack --stack-name $stackName --template-url $templateUrl --capabilities $capabilityList --parameters $JsonParameter --region "us-east-1"

从错误起,看来cli不喜欢ParameterValue中的空格。 我如何逃逸空间,以便cli不会抱怨值中的空间?

1 个答案:

答案 0 :(得分:3)

删除| ConvertTo-Json

您的字符串已经是一个json字符串,因此您不想执行转换。

$JsonParameter = '[{"ParameterKey":"name","ParameterValue":"John"},{"ParameterKey":"Occupation","ParameterValue":"Test Engineer"}]'

只需按原样使用字符串即可。

替代方案

如果要使用Powershell对象而不是json字符串,则可能需要在某个时候将其转换为json,以将其作为参数传递给aws调用。

这是ConvertTo-Json展现自己有用的时刻。

以这个为例

$JsonParameter = @(
    @{
        ParameterKey   = 'name'
        ParameterValue = 'John'
    },
    @{
        ParameterKey = 'Occupation'
        ParameterValue = 'Test Engineer'
    }
) 

这是一个Powershell对象,在不同的上下文中,您可能会从头构建该对象,目的是将其作为json参数传递给aws调用。

现在,要实现从“哈希表数组”状态到有效json字符串的过渡,您需要使用ConvertTo-Json cmdlet。

$JsonParameterString = $JsonParameter | Convertto-json -Compress

结果字符串与您最初使用的字符串相同,可以直接传递给aws:

[{"ParameterKey":"name","ParameterValue":"John"},{"ParameterKey":"Occupation","ParameterValue":"Test Engineer"}]

如果另一方面,您有一个json字符串并且需要对其进行编辑而不必大惊小怪,则可以使用ConvertFrom-Json cmdlet,然后根据需要编辑生成的对象,然后再次将其转换回json,然后再传递给它。下来。

附加说明

在我的Powershell to Json示例中, 我使用了-compress开关参数。这是可选的。这将创建一个压缩的json字符串(一行),而不是扩展的字符串。

参考

Powershell doc - ConvertTo-Json