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

PowerShell遍历JSON提取字段并执行Azure子网委托更新

问题描述与解决方案

需求说明

  • 从目标JSON的vnetArray中提取字段:vNetName、subnetName、SubnetAddressSpace、serviceEndpoints、securityRules、routes
  • 从目标JSON的subnetArray中提取字段:vNetName、subnetName、SubnetAddressSpace、serviceEndpoints、securityRules、routes、delegations

无法运行的PowerShell代码

$a = Get-Content '.\json_file.json' | ConvertFrom-Json
foreach ($record in $a)
{
        write-host "$($record.vNetArray.vNetName) | $($record.vNetArray.vNetLocation) | $($record.vNetArray.NetworkType) | $($record.vNetArray.vNetAddressSpace)"
}

目标JSON数据结构

{
    "$Schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "$contentVersion": "1.0.0.0",
    "parameters": {
      "vNetArray": {
        "value": [
          {
            "vNetName": "vnet-test-cus-stg",
            "vNetLocation": "CentralUS",
            "NetworkType": "Spoke",
            "vNetAddressSpace": "10.1.0.0/16",
            "subnets": [
              {
                "vNetName": "vnet-test-cus-stg",
                "subnetName": "snet-webapp-cus-stg",
                "SubnetAddressSpace": "10.1.1.0/25",
                "serviceEndpoints": [],
                "securityRules": [],
                "routes": []
              },
             {
                "vNetName": "vnet-test-cus-stg",
                "subnetName": "snet-agw-cus-stg",
                "SubnetAddressSpace": "10.1.3.0/25",
                "serviceEndpoints": [],
                "securityRules": [],
                "routes": []
              },
              {
                "vNetName": "vnet-test-cus-stg",
                "subnetName": "snet-sql-cus-stg",
                "SubnetAddressSpace": "10.1.4.0/25",
                "serviceEndpoints": [],
                "securityRules": [],
                "routes": []
              }
            ]
          }
        ]
      },
      "subnetArray": {
        "value": [
          {
            "vNetName": "vnet-test-cus-stg",
            "subnetName": "snet-webapp-cus-stg",
            "SubnetAddressSpace": "10.1.1.0/25",
            "serviceEndpoints": [],
            "securityRules": [],
            "routes": [],
            "delegations":[
              {
                  "name": "Microsoft.Web.serverFarms",
                  "properties": {
                      "serviceName": "Microsoft.Web/serverFarms"
                  }
              } 
          ],
          "PSDelegation": "Microsoft.Web/serverFarms"       
          },
          {
            "vNetName": "vnet-test-cus-stg",
            "subnetName": "snet-agw-cus-stg",
            "SubnetAddressSpace": "10.1.3.0/25",
            "serviceEndpoints": [],
            "securityRules": [],
            "routes": [],
            "delegations":[],
            "PSDelegation": ""                   
          },
          {
            "vNetName": "vnet-test-cus-stg",
            "subnetName": "snet-sql-cus-stg",
            "SubnetAddressSpace": "10.1.4.0/25",
            "serviceEndpoints": [
              {
                "service": "Microsoft.sql"
              }
            ],
            "securityRules": [],
            "routes": [],
            "delegations":[],     
            "PSDelegation": "Microsoft.Sql/managedInstances"       
          }
        ]
      }
    }
  }

背景原因

由于Bicep存在限制或潜在Bug,测试出可行的解决方法是通过AZ CLI修改子网,示例命令如下:

az network vnet subnet update \
    --resource-group myResourceGroup \
    --name mySubnet \
    --vnet-name myVNet \
    --delegations Microsoft.Sql/managedInstances

完整执行流程

  • 编写一个接受资源组作为参数的PowerShell脚本;
  • 检查资源组是否存在,存在则继续,不存在则抛出错误;
  • 在JSON文件中查找包含PSDelegation值的数组项,若存在该值,检查对应的vNet是否存在于资源组中;
  • 若vNet存在,检查子网是否存在,存在则继续,不存在则抛出错误;
  • 执行AZ CLI命令编辑子网:
az network vnet subnet update \
--resource-group myResourceGroup \
--name mySubnet \
--vnet-name myVNet \
--delegations Microsoft.Sql/managedInstances

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:37:21