Consulta e identifica registros de DNS estáticos mediante PowerShell

DNS está estrechamente integrado con Microsoft Active Directory. Si está realizando la validación de sistemas de Active Directory, es posible que deba habilitar los elementos de validación de estado relacionados con los servidores DNS. Por ejemplo, puede verificar si la limpieza de todos los servidores DNS está habilitada. Del mismo modo, también puede verificar cuántos registros DNS obsoletos tiene en las zonas de dominio de Active Directory. Otro verificador de estado que se aplica al servidor DNS es asegurarse de que no tenga registros DNS estáticos creados para clientes de Windows. Además de verificar los elementos de verificación de estado del servidor DNS mencionados anteriormente, también puede verificar si las actualizaciones seguras están habilitadas en la zona de dominio de Active Directory. En este artículo, explicaremos cómo puede usar un script de PowerShell simple para obtener una lista de registros DNS estáticos creados en un servidor DNS y luego identificar los registros estáticos que ya no son necesarios.

Siempre puede crear registros de DNS estáticos para sistemas que no pueden actualizar/actualizar dinámicamente sus registros de DNS, como los sistemas operativos Linux, pero no tiene sentido crear registros de DNS estáticos para ordenadors cliente de Windows. Las ordenadors cliente de Windows pueden actualizar/actualizar fácilmente sus registros DNS en el servidor DNS. Puede usar el script de PowerShell a continuación para obtener una lista de registros DNS A y CNAME estáticos de la zona de dominio DNS actual.

Índice

Requisitos para buscar registros DNS estáticos

Antes de ejecutar el script, asegúrese de cumplir con los requisitos a continuación:

  • Asegúrese de ejecutar el script desde un servidor miembro o controlador de dominio de Windows Server 2012 R2.
  • Debe instalar las herramientas del servidor DNS desde el Administrador del servidor. Tenga en cuenta lo que usa el siguiente script Obtener DNSServerResourceRecord Un cmdlet de PowerShell que se instala como parte de las herramientas del servidor DNS.
  • Asegúrese de crear una carpeta llamada "C: Temp" en su ordenador desde donde ejecutará el script.
  • Cree un archivo de texto llamado DomList.txt y especifique los nombres de las zonas de dominio en él.
  • Asegúrese de que el emulador de PDC de Active Directory esté disponible. Tenga en cuenta que siempre se recomienda realizar operaciones relacionadas con Active Directory en el emulador de PDC.

Después de cumplir con los requisitos anteriores, copie el siguiente script en un archivo PS1 y ejecútelo desde la ventana elevada de PowerShell.

### El guión comienza aquí ###

$ TestCSVFile = "C:TempDNSStaticEntries.CSV"
Elimine el elemento $ TestCSVFile -ErrorAction SilentlyContinue
$GDomList = "C:TempDomList.TXT"

$ ThisString = "Zona de dominio conectada a PDC, número de registros CNAME estáticos, número de registros DNS A estáticos, archivo de registro estático, estado final"
Agregar el contenido de "$ TestCSVFile" $ ThisString

$TotNo = 0
$ ItemCount = 0
$ Texto de prueba = ""
$EstadoPrueba = ""
$ValorSuma = ""
$ Cualquier Brecha = "No"

ForEach ($ EsteDominio en Obtener-Contenido "$ GDomList")
{

$ PDCServerToConnect = "Desconocido"
SI ($ HitWin2012DC -eq "Sí" -y $ CredInputForPS -eq "Archivo")
{
$PrefDCFile = C:TempNinguno.Txt
Agregar $ PrefDCFile "No" contenido
$ PDCCSV = Importar-CSV $ PrefDCFile
ForEach ($ ItemNow en $ PDCCSV)
{
CUANDO ($ ItemNow.Domain -eq $ ThisDomain)
{
$ PDCServerToConnect = $ ItemNow.'Controlador de Dominio de Dominio'
romper
}
}

}
el otro
{
$ PDCCSV = Importar-CSV $ PDCListFile
ForEach ($ ItemNow en $ PDCCSV)
{
CUANDO ($ ItemNow.Domain -eq $ ThisDomain)
{
$ PDCServerToConnect = $ ItemNow.PDCServer
romper
}
}
}

$ Error.Borrar ()
$ StaticARecords = Get-DnsServerResourceRecord -ZoneName $ ThisDomain -ComputerName $ PDCServerToConnect -RRType A | Donde Marca de tiempo -eq $ Nulo | Seleccione -Property HostName, RecordType -ExpandProperty RecordData
CUANDO ($Error.cuenta -eq 0)
{
$ StaticCNAMERecords = Get-DnsServerResourceRecord -ZoneName $ ThisDomain -ComputerName $ PDCServerToConnect -RRType CNAME | Donde Marca de tiempo -eq $ Nulo | Seleccione -Property HostName, RecordType -ExpandProperty RecordData

$ StaticACount = $ StaticARecords.Count
$ StaticCNAMECount = $ StaticCNAMERecords.Count

$ OkONo = "OK"
SI ($ StaticACount -ne 0 -o $ StaticCNAMECount -ne 0)
{
$ AnyGap = "Sí"
$ Está bien o no = "NO"
}

$StaticZoneAFile = "C:Temp" + $CurProfNowForAll + "_ StaticRecords_A" + $EsteDominio + ".CSV"
IF ($ ruta de prueba StaticZoneAFile)
{
Eliminar el elemento $ StaticZoneAFile
}

$ StaticZoneCNAMEFile = "C:ProgramDataDynamicPacksTechnologiesADHealthProfilerDataDNSStaticRecordsTest" + $ CurProfNowForAll + "_ StaticRecords_CNAME" + $ ThisDomain + ".CSV"
IF ($ StaticZoneCNAMEFile ruta de prueba)
{
Eliminar el elemento $ StaticZoneCNAMEFile
}

$ Registros estáticos | Exportar-CSV $ StaticZoneAFile -Agregar -NoTypeInfo
$ StaticCNAMERecords | Exportar-CSV $ StaticZoneCNAMEFile -Agregar -NoTypeInfo

$ FinStatus = ""
SI ($ OkONo -eq "NO")
{
$ FinStatus = "Registros estáticos encontrados en zonas de dominio".
}

$ FinalSTR = $ ThisDomain + "," + $ PDCServerToConnect + "," + $ StaticCNAMECount + "," + $ StaticACount + "," + $ StaticZoneAFile + ";" + $ StaticZoneCNAMEFile + "," + $ FinStatus
Agregando contenido "$ TestCSVFile" $ FinalStr
}
el otro
{
$ErrorONo = "Sí"
}

}

SI ($ErrorONo -eq "Sí")
{
$ TestText = "Verifique que el controlador de dominio esté disponible para ejecutar el paquete dinámico".
$ValorSuma = ""
$ TestStatus = "Error al ejecutar el paquete dinámico"
}
el otro
{
SI ($ AnyGap -eq "Sí")
{
$ TestStatus = "Alto"
$ValorSuma = ""
$ TestText = "Registros de DNS estáticos encontrados en zonas de dominio. Asegúrese de que no se hayan creado registros de DNS estáticos para equipos cliente, excepto para servidores que requieren registros de DNS estáticos en zonas de dominio. Los archivos de registros estáticos están en $ StaticZoneAF StaticZoneCNAMEFile "
}
SI ($ AnyGap -eq "No")
{
$ TestStatus = "Confirmado"
$ValorSuma = ""
$ TestText = "No se encontraron registros de DNS estáticos en las zonas de dominio".
}
}
$ STR = $ ADTestName + "," + $ TestStartTime + "," + $ TestStatus + "," + $ SumVal + "," + $ TestText

### El guión termina aquí ###

Desfile: Tenga en cuenta que la secuencia de comandos es lo suficientemente inteligente como para recopilar registros DNS A y CNAME estáticos de todos los dominios de Active Directory enumerados en DomList.txt y crear dos archivos CSV para cada zona de dominio.

Una vez que haya completado el script, se generará un informe para ayudarlo a comprender el estado de los registros estáticos en cada dominio de Active Directory, como se muestra en la siguiente captura de pantalla:

Como puede ver, la secuencia de comandos recopiló registros DNS A y CNAME estáticos del servidor DNS para las zonas de dominio enumeradas en el archivo DomList.txt e informó la cantidad de registros A y CNAME estáticos encontrados en cada zona de dominio. Tenga en cuenta que los registros DNS estáticos con el nombre de host y la dirección IP se almacenan en el archivo CSV en la carpeta C:Temp.

Este script es parte de los paquetes dinámicos basados ​​en PowerShell que vienen con Perfilador de estado de Active Directoryque se puede utilizar para validar completamente el bosque de Active Directory. AD Health Profiler tiene 99 comprobaciones de estado.

Con el script de PowerShell anterior, puede compilar una lista de registros DNS A y CNAME estáticos de las zonas de dominio de Active Directory. Porque el script almacena datos (dirección IP y nombres de host) en archivos CSV separados para cada dominio. Si tiene registros de DNS estáticos, puede eliminar los registros de DNS estáticos que ya no necesite o enviar el archivo al propietario del dominio para que tome medidas.

Foto: Shutterstock


Artículos de interés

Subir