You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:25:52