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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:15:06