Azure AppGateway:PowerShell中如何向固定大小JSON数组添加属性?
导出Azure应用网关后添加区域属性的解决方案
问题原因
ConvertFrom-Json默认解析生成的是不可变的PSCustomObject,数组为固定大小结构,无法直接添加属性或调用Add方法修改。
解决方法
方法1:转为可变哈希表修改
通过-AsHashTable参数将JSON转为可变哈希表,直接添加zones属性:
# 导出现有应用网关的ARM模板 Export-AzResourceGroup -ResourceGroupName $InputObject.ResourceGroupName -Resource $InputObject.id -IncludeParameterDefaultValue -IncludeComments -Path ./InputObject.json # 读取JSON并转为可变哈希表 $NewObject = Get-Content -Raw ./InputObject.json | ConvertFrom-Json -AsHashTable # 为应用网关资源添加区域配置(resources数组仅包含一个网关资源,取索引0) $NewObject['resources'][0]['zones'] = @('1','2','3') # 将修改后的对象转回JSON并保存(-Depth 10避免嵌套结构截断) $NewObject | ConvertTo-Json -Depth 10 | Out-File ./ModifiedAppGateway.json
方法2:直接编辑JSON文本
场景简单时,可通过文本替换快速插入zones属性:
# 读取原始模板内容 $jsonContent = Get-Content -Raw ./InputObject.json # 在location属性后插入zones配置(匹配JSON格式缩进) $modifiedContent = $jsonContent -replace '"location": "([^"]+)",', '"location": "$1", "zones": ["1","2","3"],' # 保存修改后的模板 $modifiedContent | Out-File ./ModifiedAppGateway.json
注意事项
- 仅Standard_v2或WAF_v2 SKU的应用网关支持区域冗余,旧版SKU无法配置
zones。 - 删除原有网关后,使用修改后的模板重新部署:
New-AzResourceGroupDeployment -ResourceGroupName $InputObject.ResourceGroupName -TemplateFile ./ModifiedAppGateway.json
内容的提问来源于stack exchange,提问作者Roelf Zomerman
相关产品推荐
相关产品推荐

