在 Active Directory 中使用 PowerShell,如何将具有给定 IP 的所有 DNS A 记录更改为新 IP?

在 Active Directory 中使用 PowerShell,如何将具有给定 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 记录的示例。

答案1

我会用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
}

相关内容