使用Update-AzureRmEventGridSubscription设置前缀/后缀为空报错,需重建订阅吗?
无需重新创建订阅!解决Event Grid订阅清空Subject前缀/后缀的问题
你完全不用重新创建订阅就能搞定这个问题!
问题根源
你遇到的错误是因为旧的AzureRm模块里的Update-AzureRmEventGridSubscription命令,对SubjectBeginsWith和SubjectEndsWith参数做了严格的非空验证——它不允许传入空字符串或者null,所以直接传''会触发参数校验失败。
解决方案
这里给你两个可行的办法:
1. 迁移到Az模块(推荐)
AzureRm模块已经被官方弃用,取而代之的Az模块修复了这个参数验证问题。使用Update-AzEventGridSubscription时,直接传入$null就能清空对应的Subject属性:
Update-AzEventGridSubscription -ResourceGroup $ResourceGroupName -TopicName $EventGridTopicName -EventSubscriptionName $Subscription.name -SubjectEndsWith $null
执行这条命令后,订阅的SubjectEndsWith就会被清空,不会再报错。
2. 调用Azure REST API(兼容AzureRm场景)
如果暂时没法切换到Az模块,可以直接调用Azure管理REST API来绕过PowerShell模块的限制:
首先获取访问令牌:
$token = (Get-AzureRmAccessToken -ResourceUrl "https://management.azure.com").Token $headers = @{ "Authorization" = "Bearer $token" "Content-Type" = "application/json" }
然后构造请求体,把需要清空的属性设为null:
$body = @{ properties = @{ filter = @{ subjectEndsWith = $null # 要是需要清空SubjectBeginsWith,就加上这行:subjectBeginsWith = $null } } } | ConvertTo-Json
最后发送PUT请求更新订阅:
$subscriptionId = (Get-AzureRmContext).Subscription.Id $apiUrl = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.EventGrid/topics/$EventGridTopicName/eventSubscriptions/$($Subscription.name)?api-version=2023-06-01-preview" Invoke-RestMethod -Uri $apiUrl -Method Put -Headers $headers -Body $body
这个方法直接调用底层API,不受PowerShell模块的参数限制,能成功清空对应的Subject过滤规则。
内容的提问来源于stack exchange,提问作者Leszek
相关产品推荐
相关产品推荐

