使用New-AzResource创建应用网关探测对象报错求助
问题原因及解决建议
核心错误点
- ResourceType格式错误:你指定的
Microsoft.Network/applicationGateways/probes/probename不符合Azure资源URI规范,子资源名称不应包含在ResourceType中,正确的ResourceType是Microsoft.Network/applicationGateways/probes,探测名称需要和应用网关名称一起放在ResourceName参数里,格式为appGwName/probes/probename。 - Properties参数格式错误:
match字段不能直接传字符串200-399,需要构造包含statusCodes数组的对象。 - 操作方式不合适:
New-AzResource并非管理应用网关子资源的最优方式,Azure提供了专门的应用网关cmdlet来处理这类配置,更可靠且不易出错。
方法一:使用专用应用网关Cmdlet(推荐)
通过Add-AzApplicationGatewayProbeConfig和Set-AzApplicationGateway来添加探测,这是官方推荐的方式:
# 获取目标应用网关 $appGw = Get-AzApplicationGateway -Name "appGwName" -ResourceGroupName "AppGwRg" # 定义探测配置 $probeConfig = @{ Name = "probename" Protocol = "Http" Path = "/" Interval = 30 Timeout = 30 UnhealthyThreshold = 3 PickHostNameFromBackendHttpSettings = $true Match = New-AzApplicationGatewayProbeHealthResponseMatch -StatusCode "200-399" } # 添加探测到应用网关 $appGw = Add-AzApplicationGatewayProbeConfig @probeConfig -ApplicationGateway $appGw # 保存配置到Azure Set-AzApplicationGateway -ApplicationGateway $appGw
方法二:修正New-AzResource的用法
如果你坚持使用New-AzResource,需要调整参数格式:
$properties = @{ protocol = 'Http' path = '/' interval = 30 # 注意这里用数字,不是字符串 timeout = 30 unhealthyThreshold = 3 pickHostNameFromBackendHttpSettings = $true minServers = 0 match = @{ statusCodes = @("200-399") # 修正match的格式 } } $SlotParams = @{ ResourceName = "appGwName/probes/probename" # 主资源/子资源类型/子资源名称 Location = "West Europe" ResourceGroupName = "AppGwRg" ResourceType = "Microsoft.Network/applicationGateways/probes" # 正确的ResourceType PropertyObject = $properties ApiVersion = "2023-02-01" # 指定较新的API版本,避免版本兼容问题 } $execution = New-AzResource @SlotParams -Force
补充说明
- 应用网关属于复合资源,其子资源(探测、规则、后端池等)通常需要通过更新父资源的配置来创建,而非直接用
New-AzResource单独创建,这也是你用相同逻辑操作App Service没问题,但应用网关出错的原因——App Service的子资源(如部署槽)支持独立的资源创建API,而应用网关不支持。 - 始终建议使用Azure PowerShell模块中对应资源的专用Cmdlet,这类工具会自动处理API版本、参数校验和资源依赖,减少出错概率。
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

