Domain-Name-System

使用 PowerShell 在 Active Directory 中,如何將具有給定 IP 的所有 DNS A 記錄更改為新 IP?

  • June 4, 2013

我們一直在移動數據中心,我有很多不正確但在 DNS 中作為 CNAME 記錄的舊記錄,但是 A 記錄具有直接 IP(例如 192.168.100.n)並且它們都移動到新子網 (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 記錄的範例。

我將dnscmd用於修改 DNS 記錄:

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
}

引用自:https://serverfault.com/questions/435541