如何使用PowerShell删除Azure全订阅中源IP为10段的NSG规则
Azure NSG 10段源IP冗余规则清理PowerShell参考脚本
前置准备
- 提前安装Azure PowerShell Az模块:
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force - 执行前登录Azure账号:
Connect-AzAccount,多租户场景可添加-TenantId <你的租户ID>指定目标租户
操作注意事项
脚本默认开启模拟运行模式,只会输出要删除的规则不会真实执行删除,确认输出的规则完全符合预期后,再移除脚本末尾
Set-AzNetworkSecurityGroup命令的-WhatIf参数,执行真实清理
如果需要保留部分10段源IP的正常规则,可以自行在规则过滤逻辑中添加排除条件,比如按规则名称、资源组名称过滤
完整参考脚本
# 获取当前账号下所有订阅 $subscriptions = Get-AzSubscription # 定义要匹配的10段源IP前缀 $targetSourcePrefix = "10." foreach ($sub in $subscriptions) { # 切换到当前遍历的订阅 Set-AzContext -Subscription $sub.Id | Out-Null Write-Host "`n当前处理订阅:$($sub.Name) ($($sub.Id))" -ForegroundColor Cyan # 获取当前订阅下所有NSG资源 $nsgs = Get-AzNetworkSecurityGroup foreach ($nsg in $nsgs) { Write-Host " 检查NSG:$($nsg.Name) 所属资源组:$($nsg.ResourceGroupName)" -ForegroundColor Gray # 筛选源IP前缀为10段的所有规则,同时兼容单前缀和多前缀场景 $rulesToRemove = $nsg.SecurityRules | Where-Object { $_.SourceAddressPrefix -like "$targetSourcePrefix*" -or ($_.SourceAddressPrefixes -and $_.SourceAddressPrefixes.Where({$_ -like "$targetSourcePrefix*"}, 'First').Count -gt 0) } if (-not $rulesToRemove) { Write-Host " 无匹配的10段源IP规则,跳过当前NSG" -ForegroundColor Green continue } Write-Host " 找到$($rulesToRemove.Count)条匹配规则,明细如下:" -ForegroundColor Yellow $rulesToRemove | ForEach-Object { Write-Host " - 规则名:$($_.Name) 方向:$($_.Direction) 源地址前缀:$($_.SourceAddressPrefix + $_.SourceAddressPrefixes -join ',')" } # 从NSG配置中移除匹配的规则 foreach ($rule in $rulesToRemove) { Remove-AzNetworkSecurityRuleConfig -Name $rule.Name -NetworkSecurityGroup $nsg } # 提交NSG变更,默认带WhatIf仅模拟运行,确认无误后删除-WhatIf参数执行真实删除 Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg -WhatIf } }
自定义调整说明
- 仅需处理特定订阅:注释掉遍历订阅的循环,直接执行
Set-AzContext -Subscription "目标订阅名称/ID"指定订阅即可 - 跳过指定资源组/NSG:在获取NSG的语句后添加过滤逻辑,比如
$nsgs = $nsgs | Where-Object {$_.ResourceGroupName -notlike "*生产资源组前缀*"} - 匹配精确网段而非前缀:将过滤逻辑中的
-like "$targetSourcePrefix*"替换为精确匹配你要清理的CIDR,比如-eq "10.0.0.0/8"
内容的提问来源于stack exchange,提问作者wildstallionuk
相关产品推荐
相关产品推荐

