如何用PowerShell批量修改Azure中同私网IP的多个DNS A记录
批量更新Azure DNS A记录到同一私有IP的PowerShell方案
方案1:指定具体记录名批量更新
如果你已经明确要更新的所有DNS记录名,直接把它们放到数组里循环处理即可,代码如下:
# 配置参数,替换成你的实际值 $dnsRecordNames = @("web01", "db01", "api01", "cache01") # 需要更新的记录名列表 $zoneName = "your-private-domain.com" # DNS区域名称 $resourceGroupName = "your-dns-resource-group" # 资源组名称 $targetIp = "10.1.0.10" # 目标私有IPv4地址 # 循环处理每个记录 foreach ($name in $dnsRecordNames) { try { # 获取目标记录集 $recordSet = Get-AzDnsRecordSet -Name $name -ZoneName $zoneName -ResourceGroupName $resourceGroupName -RecordType A -ErrorAction Stop # 更新该记录集下所有A记录的IP(支持单条或多条A记录的场景) foreach ($record in $recordSet.Records) { $record.Ipv4Address = $targetIp } # 保存修改 Set-AzDnsRecordSet -RecordSet $recordSet -ErrorAction Stop Write-Host "✅ 成功更新记录: $name -> $targetIp" } catch { Write-Warning "❌ 处理记录 $name 失败: $_" } }
方案2:按规则过滤记录批量更新
如果需要更新符合特定规则的记录(比如前缀为app-的所有A记录),可以先查询所有A记录再过滤处理:
# 配置参数 $zoneName = "your-private-domain.com" $resourceGroupName = "your-dns-resource-group" $targetIp = "10.1.0.10" $filterPattern = "app-*" # 匹配前缀为app-的记录,可根据需求修改 # 获取符合条件的所有A记录集 $matchingRecordSets = Get-AzDnsRecordSet -ZoneName $zoneName -ResourceGroupName $resourceGroupName -RecordType A | Where-Object { $_.Name -like $filterPattern } # 循环更新 foreach ($rs in $matchingRecordSets) { try { foreach ($record in $rs.Records) { $record.Ipv4Address = $targetIp } Set-AzDnsRecordSet -RecordSet $rs -ErrorAction Stop Write-Host "✅ 成功更新记录: $($rs.Name) -> $targetIp" } catch { Write-Warning "❌ 处理记录 $($rs.Name) 失败: $_" } }
注意事项
- 执行前确保已通过
Connect-AzAccount登录Azure账号,并切换到正确的订阅(Set-AzContext -SubscriptionId "你的订阅ID") - 若某个记录集包含多条A记录,上述代码会将所有记录的IP都替换为目标值,符合你"更新为同一个私有IP"的需求
- 错误处理部分会跳过失败的记录并提示错误,不会中断整个批量操作
内容的提问来源于stack exchange,提问作者Tanveer s
相关产品推荐
相关产品推荐

