如何search域集成DNS条目

例:

  1. 我有一个名为server1.domain.local的服务器
  2. 我有很多CNAME条目在各种正向查找区域指向server1.domain.local
  3. 我想分解server1,并有一个新的服务器,server2,将要取代它。

我需要将所有指向server1.domain.local的CNAME指向server2.domain.local。

我知道我可以创buildserver1.domain.local作为另一个CNAME,但我宁愿find所有条目,并单独更改它们。

我怎么能find所有的正向查找区域中的所有引用server.domain.local?

Windows支持工具中的dnscmd工具可能是您最好的select。 您可以使用以下命令获取所有DNS区域的列表: dnscmd [servername] /EnumZones 。 您可以使用以下命令枚举每个区域中的所有CNAMElogging: dnscmd [servername] /EnumRecords [zone name] . /TYPE CNAME dnscmd [servername] /EnumRecords [zone name] . /TYPE CNAME

从理论上讲,你可以将这两者链接在一个脚本中,处理输出,并自动进行所需的更改(也可以使用带有/RecordDelete/RecordAdd命令的dnscmd )。 这是一个我将留给你(现在)的练习。

编辑:好的 – 我无法抗拒。 这是脚本。 它只会echo显实际进行更改的命令。 如果它做你想要的,那么你可以拉出echo命令,让呃撕裂。

 @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 

一种方法是从一台DNS服务器或允许执行区域传输的系统运行nslookup 。 用nslookup做一个ls > file ,它将请求一个区域数据库的副本并将其保存到一个文本文件中。 然后在你最喜欢的文本编辑器中searchfunction,find要修复的东西。

这些AD集成区域是? 如果没有,您可以用记事本手动编辑区域文件(查找和replace),然后重新加载区域。

编辑

我的错。 我的标题中没有看到这些是AD集成区域。 您仍然可以使用通过将区域更改为非AD集成区域,编辑将创build的区域文件,然后将其更改回AD集成区域的方法。 这有点破解,所以这可能不是你喜欢使用的方法。