Azure CLI生成Azure RM参数文件时--query参数报错的解决方法咨询
Azure CLI生成Azure RM参数文件时--query参数报错的解决方法咨询
看起来你在尝试用Azure CLI导出NSG对应的ARM参数文件时,卡在了JMESPath查询语法的问题上,我来帮你一步步解决这个问题。
首先,你遇到的invalid jmespath_type value错误,根源是你写的--query参数不符合JMESPath的语法规范,再加上shell环境下的引号处理问题,导致CLI无法正确解析你的查询语句。我先给你直接的解决命令,再慢慢拆解原因。
直接可用的命令(分环境)
如果你用的是Bash/Zsh等类Unix shell:
az group export --resource-group RGname --resource-ids $nsg_id --query '{"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": parameters | map_values({"value": null})}'
如果你用的是PowerShell:
az group export --resource-group RGname --resource-ids $nsg_id --query "{`"$schema`": `"https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#`", `"contentVersion`": `"1.0.0.0`", `"parameters`": parameters | map_values({`"value`": null})}"
执行上面的命令后,应该就能生成你想要的参数文件格式了。
为什么这个命令能行?
我拆解一下关键部分:
- 固定参数文件的元数据:直接在JMESPath里指定了参数文件要求的
$schema和contentVersion固定值,这两个值是ARM参数文件的标准配置,不需要从导出的模板里提取。 - 转换参数结构:用JMESPath的
map_values函数,把导出的ARM模板里每个参数的原有结构(比如包含type、defaultValue的对象)直接转换成你需要的{"value": null}格式,完美匹配目标结构。 - 引号处理:在类Unix shell里用单引号包裹整个--query参数,避免shell解析里面的双引号;在PowerShell里则用反引号转义双引号,确保CLI能正确识别JMESPath语句。
你原来的命令哪里错了?
你之前写的{$schema: $schema, contentVersion: contentVersion, parameters: parameters}有两个核心问题:
- JMESPath语法不规范:JMESPath要求构造对象时,键名必须用双引号包裹,你没加双引号导致解析失败。
- 逻辑偏差:你试图引用导出模板里的
$schema和contentVersion,但导出的ARM模板的$schema是模板自身的 schema,并不是参数文件需要的那个,完全没必要从模板里提取,直接指定固定值更准确。
备注:内容来源于stack exchange,提问作者Max_il
相关产品推荐
相关产品推荐

