在 Azure CLI 中使用包含哈希的资源 ID

Working with resource IDs containing hash in Azure CLI

在清理准备期间检查证书资源时,我遇到了几个资源 ID 包含哈希字符 (#) 的资源。当我尝试获取他们的详细信息时,Azure CLI 失败了。

az resource show --subscription $subs --ids `
    $(az resource list --subscription $subs --resource-group $rg `
        --resource-type Microsoft.Web/certificates --query '[].id' --output tsv)
(MissingApiVersionParameter) The api-version query parameter (?api-version=) is required for all requests.

内部命令给出了这个列表:

/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/prodivers/Microsoft.Web/certificates/018B8D7BEAEB68E5A074B61434030D42CD46E3E2##West Europe#
/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates/2B1CA607A52CBDC62716009CF13DEDFA859B72D2#testrg-WestEuropewebspace
/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates/59BB3E72F7281D7FCACF7B8A8DDB3D23FE0BF09E##West Europe#
/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates/81295C08FF441A0CA954B04E58A06991472468E1##West Europe#
/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates/B9E64EDE44DC848B39CC6872BD310B6BEF070FC9-testrg-WestEuropewebspace
/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates/some.domain.cz-003090D185A4A57C83E4F1E664EB12C7143D5CB1
/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates/F660F6675F0943D93F2780A9F65B48147A375913-testrg-WestEuropewebspace
/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates/some-test.domain.com-1B856146B6287E8D0D68C98E9A66B7D23A969762
/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates/some-test.domain.com-B2FBC6E5DD564B6762FF34EA1A8C1C432A2B7510

当分别对每个命令使用外部命令时,没有散列的那些(打印细节)和那些有散列的失败并出现上述错误。

$p = '/subscriptions/deadbeef-2021-4b7b-988c-abcdabcdabcd/resourceGroups/testrg/providers/Microsoft.Web/certificates'
az resource show --subscription $subs --ids `
    "$p/018B8D7BEAEB68E5A074B61434030D42CD46E3E2##West Europe#"

是Azure CLI的bug吗?我用的是Azure CLI 2.27.2,目前是稳定版。 或者是那些需要特殊处理的神秘弃用资源?如何与他们合作?

通过反复试验,我发现转义是问题所在。当我对资源 ID 的每个组件进行 URL 编码时,它就起作用了。毕竟看起来像个错误。

az resource show --subscription $subs --ids `
    "$p/018B8D7BEAEB68E5A074B61434030D42CD46E3E2%23%23West%20Europe%23"
az resource show --subscription $subs --ids `
    $(az resource list --subscription $subs --resource-group $rg `
        --resource-type Microsoft.Web/certificates --query '[].id' --output tsv |
        ForEach-Object { `
            [string]::Join('/', ($_ -split '/' |
                ForEach-Object { [uri]::EscapeDataString($_) })) `
        })