Назад | Перейти на главную страницу

Создание записей PTR из существующих записей A (Windows DNS)

Я переношу зоны DNS (как прямые, так и обратные) из Bind в Windows DNS. Обратные записи на существующем сервере Bind не очень хорошо поддерживаются для статических зон, и я бы предпочел не просто импортировать все записи.

Однако я переместил все записи A в программу установки Windows и убедился, что они очищены. Теперь у меня есть пустые обратные зоны.

Мне интересно, есть ли относительно простой способ сообщить DNS-серверу (Windows 2008 R2, интегрированная Active Directory), либо через графический интерфейс, либо через строку cmd, чтобы продолжить и создать записи PTR для всех записей A.

Каковы ваши навыки работы с 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")
}

Мой пример выше представляет собой отрывок (и обработанный) фрагмент сценария, который я использую для добавления записей CNAME для существующих записей A. Выполнение PTR должно быть очень похожим; исправь мою фу-бар-баз маху рукой. Есть больше идей и указателей в эта статья Scripting Guys.

Итак, следует более полный ответ. Обратите внимание, что он очень мало проверяет ошибки и слишком болтлив. Я взял большинство идей из Сценарист и ответ 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)
}