我正在尝试将带有空格的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不会抱怨值中的空间?
答案 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字符串(一行),而不是扩展的字符串。
参考