web-dev-qa-db-ja.com

既存のAレコードからPTRレコードを作成する(Windows DNS)

DNSゾーン(順方向と逆方向の両方)をバインドからWindowsDNSに移行しています。既存のバインドサーバーのリバースエントリは、静的ゾーンに対して十分に維持されていないため、すべてのレコードをインポートするだけではありません。

ただし、すべてのAレコードをWindowsセットアップに移動し、クリーンアップされていることを確認しました。今、私は空のリバースゾーンを持っています。

私が疑問に思っているのは、GUIまたはコマンドラインを介してDNSサーバー(Windows 2008 R2、Active Directory統合)に先に進み、すべてのAレコードのPTRレコードを作成するように指示する比較的簡単な方法があるかどうかです。

3
J.Zimmerman

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")
}

上記の私の例は、既存のAレコードのCNAMEレコードを追加するために使用するスクリプトの抜粋(およびサニタイズ)ビットです。 PTRの実行は非常に似ているはずです。 foo-bar-bazハンドウェーブを修正しました。 このScripting Guysの記事 にはさらに多くのアイデアとポインタがあります。

3
AndyN

したがって、より完全な答えが続きます。エラーチェックはほとんど行われず、おしゃべりすぎることに注意してください。 Scripting Guy と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)
}
2
Chris