Powershell 脚本中带有 JSON 对象的 Azure Cli 更新变量

Azure Cli update variable with JSON object in powershell script

我正在尝试使用 az cli 从 PowerShell 脚本中更新 Azure 管道组变量。

我有更新变量的命令,但它修改了 json 并删除了所有引号 (")

所以不是从更新变量 {"a": "a"}{"a": "b"}

它更新为 {a: b}

我是运行下面的命令

$json = ConvertTo-Json $a -Compress
Write-Host $json
az pipelines variable-group variable update --group-id 236 --name MyJson --detect true --secret false --value $json

write-host 的输出是

{"a": "b"}

az pipelines variable-group variable update 的输出是

{
 "MyJson": {
   "isSecret": null,
   "value": "{a:b}"
  }
}

我做错了什么以及如何在不修改 JSON 的情况下更新它?

所有变量都存储为字符串并且是可变的,当它在双引号中时它已经意味着字符串。所以它删除了里面的所有引号。如果你想让引号也存储为值,那么你需要像这样传输它们:

{\"a\":\"b\"}

或者只用单引号:

'{"a":"b"}'

最后,它看起来像这样:

没有必要将双引号存储为值。所以我不建议你没有任何特殊原因这样做。

所以当@charles 像那样将数据直接传递给命令时起作用时,我们使用的是变量。

虽然我明白这里发生了什么,但仍然认为 az 命令可以更好地处理这个问题。

所以为了让它工作,我必须对字符串进行替换并将所有 " 替换为 \"

这很烦人,但它确实有效,所以我的最终命令如下所示:

$new_json = $json.replace("`"", "\`"")
az pipelines variable-group variable update --group-id $(VarGroupId) --name var_name --detect true --secret false --value $new_json