从现有 A 记录创建 PTR 记录(Windows DNS)

从现有 A 记录创建 PTR 记录(Windows DNS)

我正在将 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)
}

相关内容