I have been working on a couple of DNS scripts lately and (with help from this forum, ty) have just about completed them. I am working on one at the moment, however, that has some strange behavior - at least nothing I expected. The request is to feed in an array of machines, find them in DNS, and then update the IP address. I found the code below while searching best ways to do this and decided to make this the base of the script:
$oldobj = get-dnsserverresourcerecord -name $Hostname -zonename $zonename -rrtype "A" $newobj = get-dnsserverresourcerecord -name $Hostname -zonename $zonename -rrtype "A" $updateip = Read-host "Please enter new IP Address" $newobj.recorddata.ipv4address=[System.Net.IPAddress]::parse($updateip) Set-dnsserverresourcerecord -newinputobject $newobj -oldinputobject $oldobj -zonename $zonename -passthru
I will need to write some logic in to search through DNS to populate the ZoneName, etc. but I figured it is a good start. In testing however, I noticed that when the A record is updated the PTR record is deleted completely. I would have expected, I guess, that it either stay the same (meaning I would have to run this same code against the PTR) or that it update to reflect the new IP. I did not expect it to be deleted altogether. Just curious if this is expected behavior, and if so is there a way to update both through the single call. Otherwise, it seems just as easy to delete both the A and PTR records, then after replication recreate them with the correct info.