O utilitário dnscmd
das ferramentas de suporte do Windows é provavelmente sua melhor opção. Você pode obter uma lista de todas as zonas DNS com o comando: dnscmd [servername] /EnumZones
. Você pode enumerar todos os registros CNAME em cada zona com o comando: dnscmd [servername] /EnumRecords [zone name] . /TYPE CNAME
.
Em teoria, você poderia encadear esses dois juntos em um script, processar a saída e fazer as alterações desejadas automaticamente (também usando dnscmd
com os comandos /RecordDelete
e /RecordAdd
). Esse é um exercício que vou deixar para você (por enquanto).
Edit: Ok - eu não pude resistir. Aqui está esse script. Será apenas echo
os comandos que realmente fazem alterações. Se fizer o que você quer, então você pode puxar os comandos echo
e deixar rasgar.
@echo off
set SERVER_TO_REPLACE=server1.domain.com
set REPLACEMENT_VALUE=server2.domain.com
rem Quick and dirty list of Primary zones that aren't Reverse zones
for /F "usebackq" %%i in ('dnscmd %1 /EnumZones ^| find " Primary" ^| find /v " Rev"') do call :process_zone %1 %%i
goto end
:process_zone
rem Quick and dirty enumeration of all CNAME records in a zone
for /F "usebackq tokens=1,3,4" %%i in ('dnscmd %1 /EnumRecords %2 . /TYPE CNAME ^| find " CNAME"') do call :process_RR %1 %2 %%i %%j %%k
goto end
:process_RR
rem Check a record and alter it if necessary
if /I "%5" EQU "%SERVER_TO_REPLACE%" (
echo dnscmd %1 /RecordDelete %2 %3 %4 %5 /f
echo dnscmd %1 /RecordAdd %2 %3 %4 %REPLACEMENT_VALUE%
)
:end