Skip to content

Instantly share code, notes, and snippets.

@kennystrawnmusic
Last active December 4, 2025 22:06
Show Gist options
  • Select an option

  • Save kennystrawnmusic/40a098d7811260cf779bbeca2df3d768 to your computer and use it in GitHub Desktop.

Select an option

Save kennystrawnmusic/40a098d7811260cf779bbeca2df3d768 to your computer and use it in GitHub Desktop.
function Clone-RemoteDnsServerZone {
param(
[Parameter(Mandatory=$true)]
[string]$IPAddr
)
$zones = Get-DnsServerZone -ComputerName $IPAddr -ErrorAction SilentlyContinue
$zones | % {
$zname = $_.Name
$SrvRecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType Srv -ErrorAction SilentlyContinue
$ARecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType A -ErrorAction SilentlyContinue
$AAAARecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType AAAA -ErrorAction SilentlyContinue
$PtrRecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType Ptr -ErrorAction SilentlyContinue
$TxtRecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType Txt -ErrorAction SilentlyContinue
$SoaRecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType Soa -ErrorAction SilentlyContinue
$NsRecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType Ns -ErrorAction SilentlyContinue
$CNameRecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType CName -ErrorAction SilentlyContinue
$DNameRecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType DName -ErrorAction SilentlyContinue
$DnsKeyRecs = Get-DnsServerResourceRecord -ComputerName $IPAddr -ZoneName $zname -RRType DnsKey -ErrorAction SilentlyContinue
Add-DnsServerPrimaryZone -Name $zname -ReplicationScope Forest -PassThru
$SrvRecs | % {
$rnane = $_.Name
$dname = $_.DomainName
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
DomainName = $dname
}
Add-DnsServerResourceRecord -Srv @splat -ErrorAction SilentlyContinue
}
$ARecs | % {
$rname = $_.Name
$ip = $_.IPv4Address
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
IPv4Address = $ip
}
Add-DnsServerResourceRecord -A @splat -ErrorAction SilentlyContinue
}
$AAAARecs | % {
$rname = $_.Name
$ip = $_.IPv6Address
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
IPv6Address = $ip
}
Add-DnsServerResourceRecord -AAAA @splat -ErrorAction SilentlyContinue
}
$PtrRecs | % {
$rname = $_.Name
$dname = $_.PtrDomainName
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
PtrDomainName = $dname
}
Add-DnsServerResourceRecord -Ptr @splat -ErrorAction SilentlyContinue
}
$TxtRecs | % {
$rname = $_.Name
$text = $_.Strings
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
DescriptiveText = $text
}
Add-DnsServerResourceRecord -Txt @splat -ErrorAction SilentlyContinue
}
$SoaRecs | % {
$rname = $_.Name
$primaryserver = $_.PrimaryServer
$responsibleperson = $_.ResponsiblePerson
$serialnumber = $_.SerialNumber
$refreshinterval = $_.RefreshInterval
$retryinterval = $_.RetryInterval
$expireinterval = $_.ExpireInterval
$minimumttl = $_.MinimumTimeToLive
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
PrimaryServer = $primaryserver
ResponsiblePerson = $responsibleperson
SerialNumber = $serialnumber
RefreshInterval = $refreshinterval
RetryInterval = $retryinterval
ExpireInterval = $expireinterval
MinimumTimeToLive = $minimumttl
}
Add-DnsServerResourceRecord -Soa @splat -ErrorAction SilentlyContinue
}
$NsRecs | % {
$rname = $_.Name
$dname = $_.NameServer
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
NameServer = $dname
}
Add-DnsServerResourceRecord -Ns @splat -ErrorAction SilentlyContinue
}
$CNameRecs | % {
$rname = $_.Name
$dname = $_.HostNameAlias
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
HostNameAlias = $dname
}
Add-DnsServerResourceRecord -CName @splat -ErrorAction SilentlyContinue
}
$DNameRecs | % {
$rname = $_.Name
$dname = $_.TargetName
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
TargetName = $dname
}
Add-DnsServerResourceRecord -DName @splat -ErrorAction SilentlyContinue
}
$DnsKeyRecs | % {
$rname = $_.Name
$flags = $_.Flags
$protocol = $_.Protocol
$algorithm = $_.Algorithm
$publickey = $_.PublicKey
$splat = @{
ZoneName = $zname
Name = $rname
AllowUpdateAny = $true
Flags = $flags
Protocol = $protocol
Algorithm = $algorithm
PublicKey = $publickey
}
Add-DnsServerResourceRecord -DnsKey @splat -ErrorAction SilentlyContinue
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment