我们一直在移动数据中心,我有很多旧记录,这些记录不正确,但在 DNS 中作为 CNAME 记录,但 A 记录具有直接 IP(例如 192.168.100.n),它们都移动到了新的子网(10.19.100.n)。
我只需要编写一个 powershell 脚本来更改所有这些记录。我找到了这个网站:
http://www.indented.co.uk/index.php/2008/12/30/administering-microsoft-dns-in-powershell/
并从中我编写了这个简单的脚本:
$dnsServer = "meldc2"
$scope = New-Object Management.ManagementScope("\\$dnsServer\root\MicrosoftDNS")
$path = New-Object Management.ManagementPath("MicrosoftDNS_Zone")
$options = New-Object Management.ObjectGetOptions($Null,[System.TimeSpan]::MaxValue, $True)
$ZoneClass= New-Object Management.ManagementClass($scope,$path,$options)
$Zones = Get-WMIObject -Computer $dnsServer -Namespace "root\MicrosoftDNS" -Class "MicrosoftDNS_Zone"
$Zones | Get-Member
foreach($Z in $Zones) {
$Z | Select-Object Name,DsIntegrated,ZoneType,Reverse,Data
}
但这只能让我获得根区域列表。我不明白如何迭代每个区域中的所有条目。此外,我看到的所有示例都涉及添加新区域,但我找不到任何关于修改现有 A 记录的示例。
答案1
我会用dnscmd
修改 DNS 记录:
dnscmd meldc2.example.com /recorddelete example.com A host.example.com
dnscmd meldc2.example.com /recordadd example.com host A 10.19.100.n
batch
这可以包含在或中的循环中PowerShell
,例如:
$domain = "example.com"
dnscmd /enumrecords $domain `@ /type A | % {
$name = $_.split(" ")[0]
$ip = $_.split("`t")[-1] -replace "192.168.100", "10.19.100"
dnscmd /recorddelete $domain A "$name.$domain"
dnscmd /recordadd $domain $name A $ip
}