【问题标题】:Check DNS to see if Record Exists检查 DNS 以查看记录是否存在
【发布时间】:2018-12-24 04:24:55
【问题描述】:

我正在尝试创建一个 PowerShell 脚本来执行以下操作:

  1. 打开我的 CSV 文件。 A 列具有服务器的主机名。 B 列有 IP 地址
  2. 然后我想查看主机名是否存在于 DNS 中。我检查第一个主机名,如果主机存在,则继续下一个主机名。如果没有,请使用主机名和 ip 将新的 A-Record 添加到 DNS。

我的问题是,当它检查记录是否存在于 DNS 中时,它说该记录不存在,然后尝试创建它,而实际上它确实存在于 DNS 中。 这是我的脚本:

# Declare Variables. These variables are different in each domain
$ZoneName = "domain.com"
$DNSServer = "domain1.domain.com"
$ExistsInDNS = "C:\myScripts\DNSScavenging\RestoreDNSRecords\ExistsInDNS.txt"
$RestoredToDNS = "C:\myScripts\DNSScavenging\RestoreDNSRecords\RestoredToDNS.txt"

$DNSRecords = Import-Csv -path "C:\myScripts\DNSScavenging\RestoreDNSRecords\dnsrestoretest.csv" -Header "Server","IP"  

foreach ($DNSRecord in $DNSRecords){

    # Check DNS to see if the Server and IP exists
    write-host "Checking to see if $($DNSRecord.Server) exists in DNS"
    $DNSCheck = [System.Net.DNS]::GetHostByName($DNSRecord.Server)                   
    if ($($DNSCheck.HostName) -contains $($DNSRecord.Server)) {         
        write-host "$($DNSRecord.Server) $($DNSRecord.IP) exists in DNS" -ForegroundColor "Green" 
        write-output "$($DNSRecord.Server) $($DNSRecord.IP)" | out-file $ExistsInDNS -Append
    } else { 
        write-host "$($DNSRecord.Server) $($DNSRecord.IP) does not exist in DNS.  Restoring $($DNSRecord.Server) $($DNSRecord.IP) in DNS" -ForegroundColor "Yellow"
        write-output "$($DNSRecord.Server) $($DNSRecord.IP)"  | out-file $RestoredToDNS -Append
        # Add record into DNS   
        Add-DnsServerResourceRecordA -ComputerName $DNSServer -ZoneName "$ZoneName" -Name $DNSRecord.Server -AllowUpdateAny -IPv4Address $DNSRecord.IP
    }
}

【问题讨论】:

    标签: windows powershell server dns


    【解决方案1】:

    对于其他偶然发现此问题的人,我将为您节省几个小时的闲逛时间。像下面这样格式化 .csv,包括标题,但在这种情况下不要使用 fqdn,只使用主机名。

    name,ip
    testnameexample,192.168.1.1
    

    并使用此代码:

    #Declare Variables. These variables are different in each domain
    $ZoneName = "yourdomain.com"
    #$DNSServer = "yourdnsserver.yourdomain.com"
    $ExistsInDNS = "C:\temp\ExistsInDNS.txt"
    $RestoredToDNS = "C:\temp\AddedToDNS.txt"
    
    $DNSRecords = Import-Csv -path "C:\temp\IP_LIST.csv" -Header "name","ip"  
    
    foreach ($DNSRecord in $DNSRecords){
    
        # Check DNS to see if the Server and IP exists
        write-host "Checking to see if $($DNSRecord.name) exists in DNS"          
        $DNSCheck = $(resolve-DnsName -name "$($DNSRecord.name).$ZoneName" -erroraction 'silentlycontinue' | select-object Name)
        write-host "DNS Lookup Result [blank if not found]: $($DNSCheck.Name)"
        if ($($DNSCheck.Name) -match $($DNSRecord.name)) {         
            write-host "$($DNSRecord.name) $($DNSRecord.ip) exists in DNS, Skipping.." -ForegroundColor "Green" 
            write-output "$($DNSRecord.name) $($DNSRecord.ip)" | out-file $ExistsInDNS -Append
        } else { 
            write-host "$($DNSRecord.name) $($DNSRecord.ip) does not exist in DNS.  Adding $($DNSRecord.name) $($DNSRecord.ip) in DNS" -ForegroundColor "Yellow"
            write-output "$($DNSRecord.name) $($DNSRecord.ip)"  | out-file $RestoredToDNS -Append
            # Add record into DNS   
            #Add-DnsServerResourceRecordA -ComputerName $DNSServer -ZoneName "$ZoneName" -Name $($DNSRecord.name) -AllowUpdateAny -IPv4Address $($DNSRecord.ip)
            Add-DnsServerResourceRecordA -ZoneName "$ZoneName" -Name $($DNSRecord.name) -AllowUpdateAny -IPv4Address $($DNSRecord.ip)
        }
    }
    

    【讨论】:

      【解决方案2】:

      我建议你使用:

      Resolve-DnsName -Name "DNSEntry" -Server "yourserver"

      这样你可以直接检查你的目标dns服务器,你只需要检查它是否返回true。

      【讨论】:

      • 效果更好!我使用了那个 cmdlet 并稍微改变了逻辑以适应它
      猜你喜欢
      • 2023-04-07
      • 2020-05-23
      • 2021-06-01
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      相关资源
      最近更新 更多