-
Notifications
You must be signed in to change notification settings - Fork 0
/
Add-MissingPTR.ps1
44 lines (30 loc) · 1.56 KB
/
Add-MissingPTR.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<#
Script to search for and add missing PTR records for all static A records in a given zone.
If a reverse lookup zone does not exist for an A record, the script will throw an error and simply skip that record.
Create missing reverse zones and re-run the script to create the missing PTR records.
Created: 2023-05-11
Author: lucas@hokerberg.com
#>
# Define parameters
$domain = "domain.local"
$dc = "dc1.domain.local"
# Get and loop through all DNS record
$records = Get-DnsServerResourceRecord -ZoneName $domain -RRType A -ComputerName $dc | Where-Object {$_.TimeStamp -eq $null}
foreach ($record in $records) {
# Prepare the PTR data
$data = $record.HostName + "." + $domain
# Parse the PTR name (last octet)
$name = ($record.RecordData.IPv4Address.ToString() -replace '^(\d+)\.(\d+)\.(\d+).(\d+)$','$4');
# Parse the zone name (first 3 octets in reverse)
$zoneName = ($record.RecordData.IPv4Address.ToString() -replace '^(\d+)\.(\d+)\.(\d+).(\d+)$','$3.$2.$1') + '.in-addr.arpa';
# Try to find existing PTR record
$find = Get-DnsServerResourceRecord -Name $name -ZoneName $zoneName -RRType PTR -ComputerName $dc -ErrorAction SilentlyContinue
# PTR record missing - try to create one
if ($null -eq $find) {
Write-Host "[MISSING] Data: $($data) | Name: $($name) Zone: $($zoneName)"
Add-DnsServerResourceRecordPtr -Name $name -ZoneName $zoneName -ComputerName $dc -PtrDomainName $data
# PTR record found - just inform
} else {
Write-Host "[OK] Data: $($data) | Name: $($name) Zone: $($zoneName)"
}
}