none
Работа с ptr-записями dns. RRS feed

  • Вопрос

  • Добрый день.

    В обратных зонах dns есть ptr-записи которым соответствует несколько dns имён.На пример:

    10.10.10.10 - hostA

     10.10.10.10 - hostB и т.д.

    Можно ли скриптом удалить все такие дублируюшие записи?

    Заранее спасибо. 

    5 августа 2014 г. 8:30

Ответы

  • $dnsserver = "FQDN1","FQDN2","FQDN2"
    $cred = Get-Credential
    foreach($dns in $dnsserver) {
    	$zones = Get-WmiObject -ClassName MicrosoftDNS_Zone -Namespace "root\MicrosoftDNS" -Filter "ZoneType=1 and Name like '%in-addr.arpa'" -ComputerName $dns -Credential $cred
    	foreach($zone in $zones) {
    		$ptr = Get-WmiObject -ClassName MicrosoftDNS_PTRType -Namespace "root\MicrosoftDNS" -Filter "ContainerName='$($zone.Name)'" -ComputerName $dns -Credential $cred
    		$ptr | Group OwnerName | Where {$_.Count -gt 1} | Foreach {
    			$_.Group | Foreach {$_.Delete()}
    		}
    	}
    }

    • Помечено в качестве ответа Igor3000 6 августа 2014 г. 10:35
    5 августа 2014 г. 12:03
    Отвечающий
  • foreach($dns in $dnsserver) {
    	$zones =...
    	foreach($zone in $zones) {
    		........
    	}
    	Get-WmiObject Win32_Service -ComputerName $dns -Filter "Name='DNS'" -Credential $cred | Foreach {
    		$_.StopService()
    		$_.StartService()
    	}
    }


    • Изменено KazunEditor 6 августа 2014 г. 8:29
    • Помечено в качестве ответа Igor3000 6 августа 2014 г. 10:35
    6 августа 2014 г. 8:28
    Отвечающий

Все ответы

  • Скрипт - это полумера. Лучше включить Scavenging на сервере и обратной зоне и немножко потерпеть :)

    http://blogs.technet.com/b/networking/archive/2008/03/19/don-t-be-afraid-of-dns-scavenging-just-be-patient.aspx


    Microsoft Certified Doing Nothing Expert

    5 августа 2014 г. 8:36
  • Scavenging включен и функционирует нормально. Мне хотелось бы скриптом...
    5 августа 2014 г. 8:42
  • $dnsserver = "FQDN"
    Get-DnsServerZone -ComputerName $dnsserver  | Where {$_.ZoneType -eq "Primary" -and $_.ZoneName -match "in-addr.arpa"} | Foreach {
    	$zone = $_.ZoneName
    	Get-DnsServerResourceRecord -ZoneName $zone -ComputerName $dnsserver -RRType Ptr  | 
    		Group HostName | Where {$_.Count -gt 1} | Foreach {
    			$_.Group | Remove-DnsServerResourceRecord -ZoneName $zone -ComputerName $dnsserver -Force 
    	}
    }


    • Изменено KazunEditor 5 августа 2014 г. 9:02
    5 августа 2014 г. 9:02
    Отвечающий
  • А как добавить данные для аутентификации?

    А если серверов большн одного?

    Заранее спасибо

    5 августа 2014 г. 9:25
  • Для серверов 2012+.

    $dnsserver = "FQDN1","FQDN2","FQDN2"
    $cred = Get-Credential
    $option = New-CimSessionOption -Protocol Dcom
    $session = New-CimSession -ComputerName $dnsserver -Credential $cred -SessionOption $option
    
    Get-DnsServerZone -CimSession $session | Where {$_.ZoneType -eq "Primary" -and $_.ZoneName -match "in-addr.arpa"} | Foreach {
    	$zone = $_.ZoneName
    	Get-DnsServerResourceRecord -ZoneName $zone -CimSession $session -RRType Ptr  | 
    		Group HostName | Where {$_.Count -gt 1} | Foreach {
    			$_.Group | Remove-DnsServerResourceRecord -ZoneName $zone -CimSession $session
    	}
    }

    5 августа 2014 г. 9:51
    Отвечающий
  • странно - стало выдавать ошибку:

    Get-DnsServerZone : Invalid namespace
    At line:8 char:1
    + Get-DnsServerZone -CimSession $session | Where {$_.ZoneType -eq "Primary" -and $ ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : MetadataError: (PS_DnsServerZone:root/Microsoft/...S_DnsServerZone) [Get-DnsServerZone], CimException
    + FullyQualifiedErrorId : HRESULT 0x8004100e,Get-DnsServerZone
      + PSComputerName : dc1.local

    Get-DnsServerZone : Invalid namespace
    At line:8 char:1
    + Get-DnsServerZone -CimSession $session | Where {$_.ZoneType -eq "Primary" -and $ ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : MetadataError: (PS_DnsServerZone:root/Microsoft/...S_DnsServerZone) [Get-DnsServerZone], CimException
    + FullyQualifiedErrorId : HRESULT 0x8004100e,Get-DnsServerZone
      + PSComputerName : dc2.local

    Хотя в первом варианте скрипта ругался только на недостаток прав

    5 августа 2014 г. 10:21
  • $dnsserver = "FQDN1","FQDN2","FQDN2"
    $cred = Get-Credential
    foreach($dns in $dnsserver) {
    	$zones = Get-WmiObject -ClassName MicrosoftDNS_Zone -Namespace "root\MicrosoftDNS" -Filter "ZoneType=1 and Name like '%in-addr.arpa'" -ComputerName $dns -Credential $cred
    	foreach($zone in $zones) {
    		$ptr = Get-WmiObject -ClassName MicrosoftDNS_PTRType -Namespace "root\MicrosoftDNS" -Filter "ContainerName='$($zone.Name)'" -ComputerName $dns -Credential $cred
    		$ptr | Group OwnerName | Where {$_.Count -gt 1} | Foreach {
    			$_.Group | Foreach {$_.Delete()}
    		}
    	}
    }

    • Помечено в качестве ответа Igor3000 6 августа 2014 г. 10:35
    5 августа 2014 г. 12:03
    Отвечающий
  • Отлично!!!

    Работает как надо!

    А можно ли в этом же скрипте рестартовать dns-сервис???

    6 августа 2014 г. 8:14
  • foreach($dns in $dnsserver) {
    	$zones =...
    	foreach($zone in $zones) {
    		........
    	}
    	Get-WmiObject Win32_Service -ComputerName $dns -Filter "Name='DNS'" -Credential $cred | Foreach {
    		$_.StopService()
    		$_.StartService()
    	}
    }


    • Изменено KazunEditor 6 августа 2014 г. 8:29
    • Помечено в качестве ответа Igor3000 6 августа 2014 г. 10:35
    6 августа 2014 г. 8:28
    Отвечающий
  • спасибо! то что надо!
    6 августа 2014 г. 10:37