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

无法将Hashtable转换为数组并附加到PSCustomObject的问题排查

解决Hashtable转JSON对象数组的格式问题

问题原因

你当前得到的"@{name=sub-001-dev}"是因为$params.parameters.parSubnets.value初始类型不是对象数组,PowerShell自动将PSCustomObject转换为了字符串表示。同时你的代码未添加delegation字段,无法生成期望的嵌套结构。

修正步骤

  1. 初始化对象数组:确保parSubnets.value为对象数组类型,避免自动转字符串
  2. 构建完整子网对象:包含name和delegation字段,匹配目标JSON结构
  3. 避免手动修改JSON引号:依赖ConvertTo-Json生成正确格式,直接传递给az命令

修改后的代码

foreach ($lz in $lzs) {
    # 读取参数文件并转换为对象
    $params = Get-Content -Raw -Path $PARAMETERS | ConvertFrom-Json
    # 更新订阅ID参数
    $params.parameters.parPeeredVnetSubscriptionId.value = $lz.subscriptionId

    # 确保parSubnets.value是对象数组,避免初始为字符串/null导致格式异常
    if (-not $params.parameters.parSubnets.value -or $params.parameters.parSubnets.value -is [string]) {
        $params.parameters.parSubnets.value = @()
    }

    foreach ($subnet in $subnetsArray) {
        if ($subnet.spokeNetworkName -eq $landingZone.parSpokeNetworkName) {
            # 构建包含delegation的完整子网哈希表
            $subnetHashtable = @{
                name = $subnet.name
                delegation = @(
                    @{
                        id = "001"
                        name = "test"
                    }
                )
            }

            # 将哈希表转为PSCustomObject后加入数组
            $params.parameters.parSubnets.value += [pscustomobject]$subnetHashtable
        }
    }

    # 转换为JSON,Depth确保嵌套结构被正确序列化
    $updatedParamsJson = $params | ConvertTo-Json -Depth 4
    Write-Host $updatedParamsJson

    # 直接传递JSON字符串给az命令,无需手动修改引号
    az deployment mg what-if --name $NAME --location $LOCATION --management-group-id $mgid --template-file $TEMPLATEFILE --parameters "$updatedParamsJson"
}

关键说明

  • 数组初始化:如果原参数文件中parSubnets.value是空字符串或null,必须先设置为空数组@(),才能保证后续添加的PSCustomObject保持对象类型。
  • 嵌套结构处理:delegation是数组类型,用@()包裹哈希表,确保转JSON后呈现数组格式。
  • JSON深度设置:ConvertTo-Json的-Depth参数需大于等于结构嵌套层级,这里设置为4确保delegation的嵌套结构被正确序列化。
  • 引号处理:手动替换"为\"会破坏JSON结构,az命令可直接接受正确格式的JSON字符串,无需额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:14:54