Domain-Name-System
使用 PowerShell 在 Active Directory 中,如何將具有給定 IP 的所有 DNS A 記錄更改為新 IP?
我們一直在移動數據中心,我有很多不正確但在 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 }