通过PowerShell创建Azure虚拟网络对等互连时资源ID报错如何解决
跨订阅Azure VNet对等创建失败解决方案
报错根因说明
你收到的资源标识符格式无效报错不是$coreVNetID为字符串类型导致的,Azure PowerShell命令本身接受字符串格式的资源ID,报错核心原因是获取远端VNet ID的操作没有返回合法值,要么是空值,要么是不符合规范的资源ID格式。
解决方案
方案1(推荐):无需切换订阅,直接指定订阅参数获取资源ID
Get-AzVirtualNetwork原生支持-SubscriptionId参数,可以直接跨订阅拉取VNet资源,无需来回切换订阅上下文,代码示例:
# 提前定义远端VNet所在的订阅ID $coreSubscriptionId = "替换为远端VNet所属的订阅ID" # 直接跨订阅获取VNet资源ID $coreVNetID = (Get-AzVirtualNetwork -Name $coreVNet -ResourceGroupName $coreRG -SubscriptionId $coreSubscriptionId).Id # 执行对等创建命令 Add-AzVirtualNetworkPeering -Name $peerNewVNet -VirtualNetwork $vNetObj -RemoteVirtualNetworkId $coreVNetID -UseRemoteGateways
方案2:手动切换订阅上下文操作
如果需要执行多步跨订阅操作,可以先保存当前订阅上下文,操作完成后切回原订阅,规避管道操作不支持的问题,代码示例:
# 保存当前操作的订阅ID $currentSubId = (Get-AzContext).Subscription.Id # 定义远端订阅ID $coreSubscriptionId = "替换为远端VNet所属的订阅ID" # 切换到远端订阅获取VNet ID Select-AzSubscription -SubscriptionId $coreSubscriptionId | Out-Null $coreVNetID = (Get-AzVirtualNetwork -Name $coreVNet -ResourceGroupName $coreRG).Id # 切回原订阅创建对等互连 Select-AzSubscription -SubscriptionId $currentSubId | Out-Null Add-AzVirtualNetworkPeering -Name $peerNewVNet -VirtualNetwork $vNetObj -RemoteVirtualNetworkId $coreVNetID -UseRemoteGateways
注意事项
- 请确保当前登录的Azure账号对两个订阅都拥有至少虚拟网络参与者权限,否则会出现权限不足导致的资源拉取或创建失败
- 正式创建对等前可执行
Write-Output $coreVNetID验证返回的ID格式是否合法,合法的VNet资源ID格式应为:/subscriptions/[订阅ID]/resourceGroups/[资源组名]/providers/Microsoft.Network/virtualNetworks/[VNet名称] - 两个VNet的地址段不能存在重叠,否则对等互连会创建失败
内容的提问来源于stack exchange,提问作者sam.solo.works
相关产品推荐
相关产品推荐

