从现有的Alogging创buildPTRlogging(Windows DNS)

我正在将DNS区域(正向和反向)从绑定迁移到Windows DNS。 现有绑定服务器中的反向条目对于静态区域并没有得到很好的维护,我宁愿不只是导入所有的logging。

然而,我把所有的Alogging移到了Windows安装程序,并确保它们被清理。 现在我有空的反向区域。

我想知道的是,如果有一种相对简单的方法来通过GUI或cmd行告诉DNS服务器(Windows 2008 R2,Active Directory集成),继续为所有Alogging创buildPTRlogging。

你的PowerShell技巧如何? 这可能是一个相当简单的使用问题

$hosts = Get-WmiObject -ComputerName $DomainController -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_AType 

然后使用CreateInstanceFromPropertyData方法:

 foreach ($record in $hosts) { $PTRRecord = [wmiclass]"\\$DomainController\root\MicrosoftDNS:MicrosoftDNS_PTRType $PTRRecord.createInstanceFromPropertydata("foo","bar","baz") } 

我上面的例子是我用来为现有Alogging添加CNAMElogging的一个脚本的摘录(和消毒)位。 做PTR应该是非常相似的; 修理我的foo-bar-baz handwave。 本“脚本专家”文章中有更多的想法和指针。

所以更完整的答案如下。 请注意,它的错误检查很less,过于健谈。 我从脚本专家和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) }