Назад | Перейти на главную страницу

Как с помощью PowerShell в Active Directory изменить все записи DNS A с заданным IP-адресом на новый 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
}