我正在将 DNS 区域(正向和反向)从 Bind 迁移到 Windows DNS。现有 Bind 服务器中的反向条目对于静态区域维护得不是很好,我不想直接导入所有记录。
不过,我已将所有 A 记录移至 Windows 设置并确保已清除它们。现在我有空的反向区域。
我想知道是否有一种相对简单的方法可以通过 GUI 或 cmd 行告诉 DNS 服务器(Windows 2008 R2,Active Directory 集成)继续为所有 A 记录创建 PTR 记录。
答案1
你的 PowerShell 技能如何?使用
$hosts = Get-WmiObject -ComputerName $DomainController -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_AType
然后使用从属性数据创建实例方法:
foreach ($record in $hosts) {
$PTRRecord = [wmiclass]"\\$DomainController\root\MicrosoftDNS:MicrosoftDNS_PTRType
$PTRRecord.createInstanceFromPropertydata("foo","bar","baz")
}
上面的示例是我用来为现有 A 记录添加 CNAME 记录的脚本的摘录(并经过净化)。执行 PTR 应该非常相似;修复我的 foo-bar-baz 手势。在这篇脚本专家文章。
答案2
因此,下面是一个更完整的答案。请注意,它几乎没有进行错误检查,而且过于冗长。我的大部分想法来自脚本专家以及 AndyN 的回答。这绝不是完美的。
$server = "mydns.domain.name"
if (-not (Test-Connection -ComputerName $server)){Throw "DNS server not found"}
$srvr = $server -split "\."
$hosts = Get-WmiObject -ComputerName $server -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_AType | where { $_.DomainName -eq "$($srvr[1]).$($srvr[2])" }
foreach ($record in $hosts) {
$resource = [WmiClass]"\\$($srvr[0])\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
$computer = $record.OwnerName
$addr = $record.IPAddress -split "\."
$rzone = "$($addr[1]).$($addr[0]).in-addr.arpa"
$text = "$($addr[3]).$($addr[2]).$rzone IN PTR $computer"
write-host "$server, $rzone, $text"
$resource.CreateInstanceFromTextRepresentation($server, $rzone, $text)
}