web-dev-qa-db-ja.com

Active DirectoryでPowerShellを使用して、特定のIPを持つすべてのDNS Aレコードを新しいIPに変更するにはどうすればよいですか?

私たちはデータセンターを移動してきましたが、正しくはなかったがDNSにCNAMEレコードとして含まれている古いレコードがたくさんありますが、直接IP(192.168.100.nなど)を持つAレコードは、すべて新しいサブネット(10.19.100.n)。

これらすべてのレコードを変更するには、PowerShellスクリプトを作成する必要があります。私はこのサイトを見つけました:

http://www.indented.co.uk/index.php/2008/12/30/administering-Microsoft-dns-in-powershell/

そしてそれから私はこの簡単なスクリプトを作りました:

$dnsServer = "meldc2"

$scope = New-Object Management.ManagementScope("\\$dnsServer\root\MicrosoftDNS")
$path = New-Object Management.ManagementPath("MicrosoftDNS_Zone")
$options = New-Object Management.ObjectGetOptions($Null,[System.TimeSpan]::MaxValue, $True)
$ZoneClass= New-Object Management.ManagementClass($scope,$path,$options)
$Zones = Get-WMIObject -Computer $dnsServer -Namespace "root\MicrosoftDNS" -Class "MicrosoftDNS_Zone"
$Zones | Get-Member
foreach($Z in $Zones) {
  $Z | Select-Object Name,DsIntegrated,ZoneType,Reverse,Data
}

しかし、それは私にルートゾーンのリストを取得するだけです。各ゾーンのすべてのエントリを反復処理する方法がわかりません。また、私が見たすべての例には新しいゾーンの追加が含まれていますが、既存のAレコードの変更で見つけることができる例はありません。

4
djsumdog

DNSレコードの変更には dnscmd を使用します。

dnscmd meldc2.example.com /recorddelete example.com A Host.example.com
dnscmd meldc2.example.com /recordadd example.com Host A 10.19.100.n

これは、batchまたはPowerShellのいずれかでループにラップできます。このような:

$domain = "example.com"
dnscmd /enumrecords $domain `@ /type A | % {
  $name = $_.split(" ")[0]
  $ip = $_.split("`t")[-1] -replace "192.168.100", "10.19.100"
  dnscmd /recorddelete $domain A "$name.$domain"
  dnscmd /recordadd $domain $name A $ip
}
4
Ansgar Wiechers