首页 > 解决方案 > 如何发送包含 & 符号的 Azure 应用程序配置值?

问题描述

我正在使用 Azure CLI 尝试将应用配置值设置为此 URL:

az appconfig kv set --key "mykey" --value "https://fake.com/action?param1=a&param2=b" -n "test" --yes

我得到以下结果。请注意,这是来自 az 命令,而不是来自 shell。

Please specify config store name or connection string(suggested).
'param2' is not recognized as an internal or external command,
operable program or batch file.

有没有办法让 az 将此 URL 作为值,而不必求助于 URL 编码之类的愚蠢的东西?这对我来说似乎坏了。

另请注意,该消息Please specify config store name or connection string(suggested).是因为它无法正确解析命令行,因为这是用 -n 指定的。如果我移动论点:

az appconfig kv set -n "test" --yes --key "mykey" --value "https://fake.com/action?param1=a&param2=b"

我现在明白了:

{
  "contentType": null,
  "etag": "zuspBqPBOHR1mXfcKCgORXHpAxB",
  "key": "mykey",
  "label": null,
  "lastModified": "2021-08-31T17:39:14+00:00",
  "locked": false,
  "tags": {},
  "value": "https://fake.com/action?param1=a"
}
'param2' is not recognized as an internal or external command,
operable program or batch file.

这似乎更糟。它错误地创建了键值对,然后尝试将 param2 作为命令运行。怎么回事?

标签: azureazure-cli

解决方案


关注@dm 的其中一个链接让我明白了这一点:

https://github.com/Azure/azure-cli/blob/dev/doc/quoting-issues-with-powershell.md

该链接完全解释了它,但基本上我需要在单引号内使用双引号,因为 Powershell 评估参数,然后 cmd 评估它们。所以单引号被 powershell 剥离,然后双引号被 cmd 剥离,最后 az 得到正确的参数。

这有效:

az appconfig kv set -n "test" --yes --key "mykey" --value '"https://fake.com/action?param1=a&param2=b"'
{
  "contentType": "text/plain",
  "etag": "XugiNgxa2I04w0gaG2OBh9Jcj75",
  "key": "mykey",
  "label": null,
  "lastModified": "2021-08-31T18:20:44+00:00",
  "locked": false,
  "tags": {},
  "value": "https://fake.com/action?param1=a&param2=b"
}

推荐阅读