当我try 使用AWS Cloud CLI的PowerShell为多个实例创建Cloud Watchalert 时(如下所示)

$instanceNames = "i-000000123456789", "i-000000123456777";

foreach ($instanceName in $instanceNames) {
    aws cloudwatch put-metric-alarm --alarm-name 'Major Alert > Memory Usage exceeds 90%' --alarm-description 'Major Alert > Memory Usage exceeds 90%' --actions-enabled --alarm-actions 'arn:aws:sns:us-east-1:123456789:Test_Topic' 'arn:aws:sns:us-east-1:123456777:Test_Topic' --metric-name 'Memory % Committed Bytes In Use' --namespace 'CWAgent' --statistic 'Average' --dimensions '[{"Name":"InstanceId","Value":"'$instanceName'"}]' --period 300 --evaluation-periods 1 --datapoints-to-alarm 1 --threshold 90 --comparison-operator 'GreaterThanThreshold' --treat-missing-data 'missing'
}

我收到以下错误消息:

设置字符串格式时出错:输入字符串的格式不正确. 第行:4字符:1

  • AWS CloudWatch PUT-METRY-ALARM--ALARM-NAME‘重大alert &>记忆我们...
  • _

设置字符串格式时出错:输入字符串的格式不正确. 第行:4字符:1

  • AWS CloudWatch PUT-METRY-ALARM--ALARM-NAME‘重大alert &>记忆我们...
  • _

即使在我简单地运行Cloudwatch cli命令来创建alert 时,我在解析json语法时也会遇到同样的错误. "Value":"'+$instanceName+'"

任何关于这方面的意见都将受到高度赞赏!!

推荐答案

有两个问题:

  • 您试图使用string interpolation,但您使用的是verbatim (single-quoted) string ('...'),其中嵌入的变量引用(如$instanceName)被设计为not扩展(内插).

    • You must use an 100 for string interpolation(有关PowerShell字符串内插的语法和规则的简要摘要,请参见this answer).

    • 在这样的字符串中,任意embedded"个字符.必须转义为`""".

  • 由于存在一个长期存在的错误up to PowerShell v7.2.x, 100 characters embedded in arguments passed to external programs must manually be escaped with 101(请注意,对PowerShell本身而言,\具有no的特殊含义).

因此,将你的--dimensions个论点表述如下:

  • 最高支持PowerShell 7.2.x:

    --dimensions "[{\`"Name\`":\`"InstanceId\`",\`"Value\`":\`"$instanceName\`"}]"
    
  • 在PowerShell 7.3+中(手动\-不再需要转义"):

    --dimensions "[{`"Name`":`"InstanceId`",`"Value`":`"$instanceName`"}]"
    

Json相关问答推荐

使用jolt删除空对象

如何使用表键名称GROUP_BY

抓取低于w jolt的对象级别

如何在Swift中使用JSON编码器的泛型

JOLT转换以基于对象属性过滤JSON数组

将boost::beast::multibuffer转换为std::istream

使用不同行数的数据创建嵌套Jolt

将JSON行转换为TSV格式, for each 数组项生成单独的行

JOLT 转换仅过滤一个字段

如何用 Xidel 正确读取这个 JSON 文件?

Swift - 将图像从 URL 写入本地文件

IE中Json响应下载(7~10)

带有方法参数的 WCF webHttpBinding 错误. 最多可以在没有包装元素的情况下序列化一个主体参数

通过 JSON 发送 HTML 代码

如何让 javascript 从 .json 文件中读取?

如何使用 Gson 解码具有未知字段的 JSON?

JSON 模式 - 如果对象*不*包含特定属性则有效

设置对象不是 JSON 可序列化的

如何从 MySQL 中检索 JSON 数据?

从 JSON 到 JSONL 的 Python 转换