Two-phase validation tooling for a DC-to-Infoblox DNS migration — capture a JSON baseline of DC, SRV and PTR state before cutover, then validate against the new authoritative DNS server afterwards and diff against the stored baseline. Three modes: Baseline → Validate → Compare. Transport is RPC / DCOM / LDAP only — no WinRM dependency.
Built to support the operational runbook for moving DNS authority off domain controllers and onto an Infoblox grid for a single AD domain. Baseline mode (Phase 0) is run pre-cutover against a DC to capture the current state of the world — DC inventory, critical SRV records (LDAP, Kerberos, GC) globally and per AD Site, forward A and reverse PTR records for every DC — and persists it to a JSON file. Validate mode (Phase 4) runs the same record-set probes against the new authoritative DNS server (typically the Infoblox grid VIP). Compare mode runs Validate and diffs the live result set against the stored baseline, flagging missing or shrunken record sets so the migration is provably whole.
DC health checks are mode-aware: in Baseline mode the script uses dcdiag /test:dns and dcdiag /test:locatorcheck against the DC’s own DNS. In Validate / Compare modes it deliberately avoids dcdiag — every dcdiag test uses the local Windows resolver, which on a DC whose NIC hasn’t been repointed to the new DNS server yet will hang for minutes. Instead the script runs PowerShell-native checks: TCP port probes (LDAP, Kerberos, RPC-EPM, SMB, and GC if applicable), and a real LDAP bind to RootDSE proving each DC is answering as a DC. A pre-flight reachability gate (TCP/53 + UDP/53 + a canary SOA query for the target domain) fails the run fast with a clear reason if the target DNS server isn’t answering, instead of grinding through 6+ minutes of timeouts.
Secure dynamic update is exercised by triggering ipconfig /registerdns on a DC via CIM-over-DCOM and re-resolving the A record, confirming GSS-TSIG signed updates succeed against the new grid. Every run produces a styled HTML report and a per-run log; Baseline mode also writes a JSON baseline file you can re-use across runs. SMTP delivery of the HTML report is optional. The script exits 0 / 1 / 2 for PASS / WARN / FAIL so it can drive a scheduled-task or pipeline gate.
Opens github.com/rt109048/Invoke-DNSMigrationValidation in a new tab
PROVIDED AS IS. Free, open-source utility intended for experienced administrators. Always test in a non-production lab environment before running anywhere that matters. By downloading and running this script you accept full responsibility for the outcome — the author accepts no liability for any direct or indirect damage caused by use, misuse, or modification.
Copyright © 2026 ITC Technology
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Open to advisory, contract and permanent opportunities involving Active Directory, Entra ID, identity governance, or zero-trust programmes. The best way to reach me is by email.