从 Excel 表动态更新 AD DNS 记录

从 Excel 表动态更新 AD DNS 记录

我们在工作时有一台 Microsoft SBS 2011 服务器,它负责处理我们公司的 DHCP 和 DNS。我们在 SBS 本身的共享目录中存储了一个 Excel 电子表格,其中包含我们拥有的所有公共 IP 地址。我们不断手动更新该 Excel 文档。如果我们可以使用这些 IP 地址的短名称动态更新我们的 DNS 服务器,那就太好了,这样当有人使用我们域上的任何机器 ping 或尝试连接到其中一个公共 IP 时,他们只需写出一个短名称,而不是整个 IP。

目前,我让 Linux 使用 bash 循环浏览该 excel 文档一次,并生成一个 Windows hosts 文件,人们可以手动将其复制到 C:\Windows\System32\Drivers\etc\hosts 中。这很有效,但需要将其复制粘贴到域中的每台机器上,而且它不是动态的 - 这正是 DNS 被发明的原因。

有没有办法让我们的 SBS 甚至 Linux 不断浏览 excel 文件并使用指向公共 IP 的一些简单记录更新 SBS AD DNS 服务器?映射的示例可能是:

123456r 196.16.56.56
123458r 196.65.89.56

我认为这些就是我们需要的 A 记录。如果我们不需要在这些条目中附加任何类型的域名,而只是让它们像这些示例一样简单,那就太好了。有什么好方法可以实现这一点?

答案1

你可以用 powershell 来做,但你需要将文件类型更改为 csv

请看这里。https://gallery.technet.microsoft.com/scriptcenter/Update-DNS-records-with-da10910d您将找到以下 powershell 脚本,只需将其设置为定期计划任务或用户可以自行运行的任务即可。我最近使用它对分布在许多区域中的 ips 进行了大规模更新,效果很好。

    # Environment Setup 
    $DNSServer = "YourDNSServer" 
    $DNSZone = "YourZoneName" 
    $InputFile = "dnsrecords.csv" 

    # Read the input file which is formatted as name,type,address with a header row 
    $records = Import-CSV $InputFile 

    # Now we loop through the file to delete and re-create records 
    # DNSCMD does not have a modify option so we must use /RecordDelete first followed by a /RecordAdd  

    ForEach ($record in $records) { 

        # Capture the record contents as variables 
        $recordName = $record.name 
        $recordType = $record.type 
        $recordAddress = $record.address 

        # Build our DNSCMD DELETE command syntax 
        $cmdDelete = "dnscmd $DNSServer /RecordDelete $DNSZone $recordName $recordType /f" 

        # Build our DNSCMD ADD command syntax 
        $cmdAdd = "dnscmd $DNSServer /RecordAdd $DNSZone $recordName $recordType $recordAddress" 

        # Now we execute the command 
        Write-Host "Running the following command: $cmdDelete" 
        Invoke-Expression $cmdDelete 

        Write-Host "Running the following command: $cmdAdd" 
        Invoke-Expression $cmdAdd 
    }

相关内容