Advertisement
Moktart

DNS Magic

May 21st, 2015
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $MagicZoneName = "magic"
  2. $ZoneName = "jivedev.com"
  3.  
  4. #Check to make sure that this is a DNS server.
  5. $DNSServerObject = Get-DnsServer -ComputerName $Env:Computername
  6. If (!($DNSServerObject)) {Throw "$Env:Computername is not a DNS Server." }
  7. #Get this server's AD site name
  8. $SiteName = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite().Name.ToLower()
  9.  
  10. #Check for the existence of the "Magic" zone.  If it's not there, create it.
  11. if ($DNSServerObject.ServerZone.ZoneName -notcontains $MagicZoneName) {
  12.     $ObjWMIClass = [wmiclass]"root\MicrosoftDNS:MicrosoftDNS_Zone"
  13.     $ObjWMIClass.CreateZone($MagicZoneName, 0, $False)
  14.     }
  15.  
  16. #Gather records from this site's "control" subdomain (e.g. "magic-pdx")
  17. $NonMagicRecords = @()
  18. Foreach ($Record in $(Get-DnsServerResourceRecord -ZoneName $ZoneName | ? Hostname -match "\.$MagicZoneName-$sitename")) {
  19.     $NonMagicRecords += $Record | Select-Object *, @{Expression={$ZoneName}; Label="ZoneName"}, @{Expression={($Record.hostname -split "\.")[0]}; Label="ShortName"}
  20.     }
  21.  
  22. #Check the other control subdomains for records that this one doesn't have and then add this to this one, ensuring reliable resolution.
  23. Foreach ($Record in $(Get-DnsServerResourceRecord -ZoneName $ZoneName | ? Hostname -match "\.$MagicZoneName-" | ? Hostname -notmatch "$sitename" )) {
  24.     if ($NonMagicRecords.ShortName -notcontains ($Record.hostname -split "\.")[0]){
  25.         $NonMagicHostname = "$(($Record.hostname -split "\.")[0]).$MagicZoneName-$sitename"
  26.         Add-DnsServerResourceRecordCName -ZoneName $ZoneName  -Name $NonMagicHostname -HostNameAlias $Record.RecordData.HostnameAlias
  27.         $Record = Get-DnsServerResourceRecord -ZoneName $ZoneName | ? Hostname -match $NonMagicHostname
  28.         $NonMagicRecords += $Record | Select-Object *, @{Expression={$ZoneName}; Label="ZoneName"}, @{Expression={($Record.hostname -split "\.")[0]}; Label="ShortName"}
  29.         }
  30.     }
  31.  
  32. #Get the current list of records in this server's "Magic" zone.
  33. $MagicRecords = Get-DnsServerZone -zone $MagicZoneName | Get-DnsServerResourceRecord | ? Hostname -NotMatch "@"
  34.  
  35. #Add new "magic" records, update existing records.
  36. Foreach ($Record in $NonMagicRecords) {
  37.     if ($MagicRecords.hostname -notcontains $Record.ShortName) {
  38.         Add-DnsServerResourceRecordCName -ZoneName $MagicZoneName  -Name $Record.ShortName  -HostNameAlias "$($Record.Hostname).$($Record.ZoneName)"
  39.         } else {
  40.         $ExistingMagicRecord = Get-DNSServerResourceRecord -ZoneName $MagicZoneName -Name $Record.ShortName
  41.         $UpdatedMagicRecord = $ExistingMagicRecord.clone()
  42.         $UpdatedMagicRecord.RecordData.HostNameAlias = "$($Record.Hostname).$($Record.ZoneName)"
  43.         Set-DnsServerResourceRecord -ZoneName $MagicZoneName -NewInputObject $UpdatedMagicRecord -OldInputObject $ExistingMagicRecord
  44.         }
  45.     }
  46.  
  47. $MagicRecords = Get-DnsServerZone -zone $MagicZoneName | Get-DnsServerResourceRecord | ? Hostname -NotMatch "@"
  48. Foreach ($Record in $MagicRecords) {
  49.     if (!(Get-DnsServerResourceRecord -ZoneName $Zonename -Name $Record.Hostname -ErrorAction SilentlyContinue)) {
  50.         Add-DNSServerResourceRecordCName -ZoneName $ZoneName -Name $Record.Hostname -HostNameAlias "$($Record.Hostname).$MagicZoneName"
  51.     }
  52.  
  53.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement