Windows 检查DNS以查看记录是否存在

Windows 检查DNS以查看记录是否存在,windows,powershell,server,dns,Windows,Powershell,Server,Dns,我正在尝试创建PowerShell脚本以执行以下操作: 打开我的CSV文件。列A具有服务器的主机名。B列有IP地址 然后我想看看DNS中是否存在主机名。我检查第一个主机名,如果该主机存在,则转到下一个主机名。如果没有,则使用主机名和ip将新A记录添加到DNS中 我的问题是,当它检查该记录是否存在于DNS中时,它会说该记录不存在,然后尝试创建它,而事实上它确实存在于DNS中。 这是我的剧本: # Declare Variables. These variables are different in

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

  • 打开我的CSV文件。列A具有服务器的主机名。B列有IP地址
  • 然后我想看看DNS中是否存在主机名。我检查第一个主机名,如果该主机存在,则转到下一个主机名。如果没有,则使用主机名和ip将新A记录添加到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
        }
    }
    
    我建议您使用:

    解析DnsName-名称“DNSEntry”-服务器“yourserver”

    通过这种方式,您可以直接检查目标dns服务器,只需检查它是否返回true。

    我建议您使用:

    解析DnsName-名称“DNSEntry”-服务器“yourserver”


    通过这种方式,您可以直接检查您的目标dns服务器,您只需检查它是否返回true。

    对于其他偶然发现此问题的人,我将为您节省几个小时的时间。如下所示格式化.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)
        }
    }
    

    对于其他偶然发现这个的人,我将为你节省几个小时的时间。如下所示格式化.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)
        }
    }
    

    这样效果更好!我使用了该cmdlet,并稍微更改了逻辑以适应它,这样效果更好!我使用了该cmdlet,并稍微更改了逻辑以适应它