Usando o PowerShell, no Active Directory, como eu alteraria todos os registros DNS A que possuem um determinado IP para um novo IP?

4

Estamos movendo centros de dados e tenho muitos registros antigos que não estavam corretos, mas no DNS como registros CNAME, mas registros A que têm um IP direto (por exemplo, 192.168.100.n) e são todos eles movendo para uma nova sub-rede (10.19.100.n).

Eu só preciso escrever um script PowerShell para alterar todos esses registros. Eu encontrei este site:

link

e com isso eu fiz este script simples:

$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
}

mas isso só me faz uma lista de zonas raiz. Eu não entendo como iterar sobre todas as entradas em cada uma das zonas. Além disso, todos os exemplos que vi envolvem a adição de novas zonas, mas não há exemplos que eu possa encontrar ao modificar os registros A existentes.

    
por djsumdog 06.10.2012 / 22:20

1 resposta

4

Eu usaria dnscmd para modificar o DNS registros:

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

Isso pode ser agrupado em um loop em batch ou PowerShell , por exemplo, assim:

$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
}
    
por 06.10.2012 / 22:34