Búsqueda de sitios web

Cómo limpiar registros DNS obsoletos con PowerShell


Cuando elimina objetos de computadora AD, los registros DNS se dejan en el DNS de Windows Server. La mejor manera es configurar el envejecimiento y la eliminación de DNS. Pero si estos registros son estáticos, no se eliminarán automáticamente. Además, ¿qué pasa si no puede esperar y desea eliminar los registros obsoletos inmediatamente? Entonces es cuando PowerShell viene al rescate. En este artículo, aprenderá cómo limpiar registros DNS obsoletos con PowerShell.

¿Qué son los registros DNS?

Los registros de recursos DNS contienen la información que mantiene una zona sobre los recursos (como hosts) que contiene la zona. Un registro de recursos típico consta de lo siguiente:

  • Nombre (host) del registro de recursos.

  • Información sobre cuánto tiempo puede permanecer el registro de recursos en la caché.

  • Tipo de registro de recurso, como un registro de recurso de host (A).

  • Datos específicos del tipo de registro, como la dirección IPv4 del host.

Puede agregar registros de recursos directamente o se pueden agregar automáticamente cuando los clientes habilitados para el Protocolo de configuración dinámica de host (DHCP) basados en Windows se unen a una red mediante una actualización dinámica.

Los siguientes tipos de registros de recursos son bien conocidos:

  • Registros de host (A, AAAA)

  • Registros de alias (CNAME)

  • Registros del intercambiador de correo (MX)

  • Registros de puntero (PTR)

  • Registros de ubicación de servicio (SRV)

  • Registros del servidor de nombres (NS)

  • Registro de texto (TXT)

  • Registro de nombre de delegación (DNAME)

  • Registro de inicio de autoridad (SOA)

Verifique registros antiguos en el Administrador de DNS

Inicie Administrador de DNS y verifique el registro DNS antiguo que contiene el nombre de host, el FQDN y la dirección IP.

En nuestro ejemplo, nos gusta encontrar el controlador de dominio que degradamos:

  • Nombre de host: DC01-2019

  • FQDN: DC01-2019.exoip.local.

  • Dirección IP: 192.168.1.51

Haga clic derecho en una zona y haga clic en Propiedades.

Haga clic en Servidores de nombres.

El servidor antiguo aparece en la lista, que es el registro del servidor de nombres (NS).

El registro Host (A) está presente.

El registro de Ubicación de servicio (SRV) está presente.

Si recorremos más zonas, encontraremos todos los registros DNS obsoletos de ese objeto informático AD en particular.

Revisar todas las zonas y eliminar los registros DNS antiguos lleva tiempo. También puede pasar que no veas un registro y se quede ahí.

En lugar de revisar todas las zonas del servidor DNS y eliminar manualmente los registros DNS del objeto de computadora AD, automatizaremos el proceso con PowerShell y limpiaremos todos los registros obsoletos.

Nota: Debe configurar la caducidad y eliminación de DNS en Active Directory, de modo que se eliminen los registros DNS dinámicos obsoletos. Si bien esto limpiará los registros obsoletos en DNS, no eliminará los registros DNS estáticos antiguos, y eso es lo que hará el siguiente script de PowerShell.

Elimine las entradas DNS obsoletas con el script de PowerShell

Una excelente manera de eliminar registros DNS antiguos es con el script de PowerShell Remove-DNSRecords.ps1 que utiliza los siguientes tres cmdlets:

  1. Cmdlet Get-DnsServerZone para recuperar las zonas principales.

  2. Cmdlet Get-DnsServerResourceRecord para buscar todos los registros de recursos iguales al FQDN, nombre de host y dirección IP.

  3. Remove-DnsServerResourceRecord para eliminar los registros DNS recuperados.

Paso 1. Descargue el script de PowerShell Remove-DNSRecords

Descargue y coloque el script de PowerShell Remove-DNSRecords.ps1 en la carpeta del controlador de dominio C:\scripts. Si no tiene una carpeta scripts, cree una.

Asegúrese de que el archivo esté desbloqueado para evitar errores al ejecutar el script. Lea más en el artículo Error sin firma digital al ejecutar el script de PowerShell.

Otra opción es copiar y pegar el siguiente código en el Bloc de notas. Asígnale el nombre Remove-DNSRecords.ps1 y colócalo en la carpeta C:\scripts.

<#
    .SYNOPSIS
    Remove-DNSRecords.ps1

    .DESCRIPTION
    Clean up stale DNS records with PowerShell.

    .LINK
    www.alitajran.com/clean-up-dns-records-powershell/

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.alitajran.com
    LinkedIn:   linkedin.com/in/alitajran

    .CHANGELOG
    V1.00, 01/20/2024 - Initial version
#>

$ServerFQDN = "dc01-2019.exoip.local." #Keep the dot (.) at the end
$ServerHostname = "dc01-2019"
$IPAddress = "192.168.1.51"

$Zones = Get-DnsServerZone | Where-Object { $_.ZoneType -eq "Primary" } |
Select-Object -ExpandProperty ZoneName

foreach ($Zone in $Zones) {
    Get-DnsServerResourceRecord -ZoneName $Zone | Where-Object { 
        $_.RecordData.IPv4Address -eq $IPAddress -or
        $_.RecordData.NameServer -eq $ServerFQDN -or
        $_.RecordData.DomainName -eq $ServerFQDN -or
        $_.RecordData.HostnameAlias -eq $ServerFQDN -or
        $_.RecordData.MailExchange -eq $ServerFQDN -or
        $_.HostName -eq $ServerHostname
    } | Remove-DnsServerResourceRecord -ZoneName $Zone -Force -WhatIf
}
  • Líneas 20, 21, 22: Cambie los valores ServerFQDN, ServerHostname y IPAddress al objeto de computadora AD desde que desea eliminar los registros DNS obsoletos.

Paso 2. Ejecute el script de PowerShell Remove-DNSRecords

Inicie Windows PowerShell y ejecute el script Remove-DNSRecords.ps1.

Nota: No le sucederá nada al entorno cuando ejecute el script porque el parámetro -WhatIf se agrega en el script. Una vez que identifique y confirme los registros obsoletos, elimine el parámetro -WhatIf y vuelva a ejecutar el script.

C:\scripts\.\Remove-DNSRecords.ps1

Así es como se ve en nuestro ejemplo.

What if: Removing DNS resource record @ of type NS from zone _msdcs.exoip.local on DC01-2022 server.
What if: Removing DNS resource record @ of type NS from zone autodiscover.exoip.com on DC01-2022 server.
What if: Removing DNS resource record dc01-2019 of type A from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record @ of type NS from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record DomainDnsZones of type A from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record _ldap._tcp.Default-First-Site-Name._sites.DomainDnsZones of type SRV from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones of type SRV from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record _ldap._tcp.DomainDnsZones of type SRV from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record ForestDnsZones of type A from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record _ldap._tcp.ForestDnsZones of type SRV from zone exoip.local on DC01-2022 server.
What if: Removing DNS resource record @ of type NS from zone TrustAnchors on DC01-2022 server.

Después de verificar los registros DNS antiguos de ese objeto de computadora AD específico, elimine el parámetro -WhatIf y vuelva a ejecutar el script.

C:\scripts\.\Remove-DNSRecords.ps1

Todos los registros DNS se eliminan correctamente para ese objeto de computadora AD específico del DNS de Windows Server.

¡Eso es todo!

Leer más: Configurar archivos de plantilla administrativa de OneDrive (ADMX/ADML) »

Conclusión

Aprendió a limpiar registros DNS obsoletos con PowerShell. La próxima vez que desee eliminar un registro DNS de DNS, utilice el script de PowerShell para eliminar los registros DNS y ahorrar tiempo.

¿Te gustó este artículo? También te puede interesar Desactivar el acceso para instalar complementos de Office. No olvides seguirnos y compartir este artículo.

Artículos relacionados