首页 > 解决方案 > 将带空格的参数传递到 AWS cli

问题描述

我正在尝试将带有空格的参数传递给aws cloudformation create-stackaws cli。

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

下面是我的参数示例

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

这返回

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

cli命令是

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

错误发生了

Error parsing parameter '--parameters': Invalid JSON:
[{"ParameterKey":"name","ParameterValue":"John"},{"ParameterKey":"Occupation","ParameterValue":"Test

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

标签: jsonpowershellaws-cli

解决方案


删除| 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-Jsoncmdlet。

$JsonParameterString = $JsonParameter | Convertto-json -Compress

生成的字符串与您最初的相同,准备传递给 aws :

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

另一方面,如果您有一个 json 字符串并且需要毫不费力地对其进行编辑,则可以使用ConvertFrom-Jsoncmdlet,然后根据需要编辑生成的对象,并在将其传递之前再次将其转换回 json。

附加说明

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

参考

Powershell 文档 - ConvertTo-Json


推荐阅读