1 - Convert-DNSDebugLogFile
SINOPSIS
Convierte archivos de registro de depuración del servidor DNS de Windows a formato CSV.
SINTAXIS
__AllParameterSets
Convert-DNSDebugLogFile [-InputFile] <string[]> [[-OutputFile] <string>] [[-Delimiter] <string>]
[[-ComputerName] <string>] [[-OutputType] <string>] [[-InputCulture] <cultureinfo>]
[[-OutputCulture] <cultureinfo>] [-SkipHeaderValidation] [-RemoveSourceFile] [-CompressOutput]
[-WhatIf] [-Confirm] [<CommonParameters>]
ALIAS
Este cmdlet tiene los siguientes alias,
DESCRIPCIÓN
Analizador de alto rendimiento para archivos de registro de depuración del servidor DNS de Windows diseñado para hacer que la actividad del servidor DNS sea transparente, analizables y evaluables en herramientas de informes y análisis.
Los registros de depuración del servidor DNS contienen información detallada de consultas/respuestas, pero son difíciles de analizar en su formato de texto sin procesar.
Este script transforma estos registros en archivos CSV estructurados que pueden importarse en Excel, Power BI, bases de datos SQL u otras plataformas de análisis de datos.
CAPACIDADES CLAVE:
- Analiza los 16 campos de los registros de depuración DNS (fecha, hora, protocolo, IP cliente, tipo de consulta, etc.)
- Genera salida CSV estructurada con delimitadores personalizables
- Crea resúmenes estadísticos opcionales que agregan actividad por cliente, protocolo y tipo de consulta
- Procesa archivos individuales o lotes vía pipeline
- Soporta formatos estándar y detallados de registros de depuración DNS
- Compresión automática opcional de archivos de salida para ahorrar espacio en disco
- Eliminación opcional de archivos fuente tras procesamiento exitoso
- Valida encabezados de archivos de registro para asegurar integridad de datos
CASOS DE USO:
- Análisis de seguridad: Identificar patrones sospechosos de consultas DNS
- Monitoreo de rendimiento: Rastrear volúmenes de consultas y tiempos de respuesta
- Planificación de capacidad: Analizar carga del servidor DNS y distribución de clientes
- Reportes de cumplimiento: Documentar actividad DNS para auditorías
- Solución de problemas: Investigar problemas de resolución DNS
RENDIMIENTO:
Optimizado para archivos grandes (más de 100 MB) usando:
- Operaciones con cadenas en lugar de expresiones regulares para el análisis
- StreamReader/StreamWriter con buffers de 64 KB
- Generación manual de CSV para evitar sobrecarga de Export-Csv
- Recolección eficiente de estadísticas basada en diccionarios
COMPATIBILIDAD:
- PowerShell 5.1+ en Windows
- PowerShell 7+ en Windows
- Windows Server 2016 y posteriores
- Soporta formatos de registro de depuración DNS Server 2012 R2 hasta 2025
EJEMPLOS
EJEMPLO 1
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log"
Convierte el registro de depuración DNS a formato CSV usando configuraciones predeterminadas.
Salida: C:\Logs\dns.csv (solo archivo de datos, delimitador punto y coma).
EJEMPLO 2
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Both
Convierte el registro DNS y genera ambos archivos de salida.
Salida: C:\Logs\dns.csv (datos) y C:\Logs\dns_statistic.csv (estadísticas agregadas).
EJEMPLO 3
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Statistic
Genera solo el archivo de estadísticas sin crear el archivo CSV completo.
Salida: C:\Logs\dns_statistic.csv (solo estadísticas).
EJEMPLO 4
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"
Convierte el registro DNS a una ubicación de salida personalizada.
Salida: C:\Output\parsed.csv.
EJEMPLO 5
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both
Convierte el registro usando coma como delimitador con una columna ComputerName.
Salida: C:\Logs\dns.csv y C:\Logs\dns_statistic.csv, ambos con “DNS01” en la columna ComputerName.
EJEMPLO 6
PS C:\> Get-ChildItem "C:\Logs\*.log" | .\Convert-DnsDebugLogFile.ps1 -OutputType Both
Procesa múltiples archivos de registro DNS vía pipeline.
Salida: Para cada archivo .log, genera archivos .csv (datos) y _statistic.csv (estadísticas).
EJEMPLO 7
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -CompressOutput
Convierte el registro DNS y comprime la salida en un archivo ZIP.
Salida: C:\Logs\dns.zip que contiene dns.csv. El archivo csv sin comprimir se elimina tras la compresión.
EJEMPLO 8
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputType Both -CompressOutput
Convierte el registro con estadísticas y comprime ambos archivos de salida.
Salida: C:\Logs\dns.zip que contiene dns.csv y dns_statistic.csv.
EJEMPLO 9
PS C:\> Get-ChildItem "C:\Logs\*.log" | .\Convert-DnsDebugLogFile.ps1 -RemoveSourceFile -CompressOutput
Procesa múltiples archivos, comprime la salida y elimina los archivos fuente.
Cada archivo .log se convierte a .zip comprimido y luego se elimina el archivo .log original.
Ideal para pipelines automatizados de archivo de registros.
EJEMPLO 10
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\old_dns.log" -RemoveSourceFile -Verbose
Convierte el archivo y elimina el archivo fuente tras procesamiento exitoso.
La salida detallada confirma la eliminación. Usar con precaución ya que los archivos fuente se eliminan permanentemente.
EJEMPLO 11
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE'
Convierte un registro DNS de un servidor Windows alemán.
Usar cuando el archivo de registro proviene de un servidor con configuración regional diferente.
EJEMPLO 12
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture ([System.Globalization.CultureInfo]::GetCultureInfo('sv-SE'))
Convierte un registro DNS de un servidor Windows sueco usando formato de fecha ISO (AAAA-MM-DD).
Útil para procesar registros de servidores con configuraciones regionales distintas.
EJEMPLO 13
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'
Convierte un registro DNS de un servidor alemán y formatea fechas para sistemas de EE. UU.
Útil para procesar registros internacionales para sistemas basados en EE. UU.
EJEMPLO 14
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture)
Convierte un registro DNS y formatea fechas de salida usando formato ISO 8601 (AAAA-MM-DD).
Ideal para compatibilidad multiplataforma o escenarios de intercambio de datos.
EJEMPLO 15
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -WhatIf
Muestra qué pasaría si se ejecuta el comando sin crear archivos realmente.
Útil para probar parámetros antes de procesar datos reales.
EJEMPLO 16
PS C:\> .\Convert-DnsDebugLogFile.ps1 -InputFile "C:\Logs\dns.log" -RemoveSourceFile -CompressOutput -WhatIf
Previsualiza el flujo completo incluyendo compresión y eliminación de archivos fuente.
No se crean, comprimen ni eliminan archivos; solo muestra qué ocurriría.
PARÁMETROS
-CompressOutput
Comprime los archivos CSV de salida en un archivo ZIP tras su creación.
Crea un archivo .zip que contiene los archivos CSV generados y luego elimina los CSV sin comprimir.
El archivo ZIP se crea en el mismo directorio que el CSV de salida con el mismo nombre base.
La compresión ocurre inmediatamente después de procesar cada archivo para gestionar eficientemente el espacio en disco.
Beneficios:
- Reduce significativamente el uso de espacio en disco (los archivos CSV se comprimen muy bien)
- Simplifica la gestión y archivo de archivos
- Adecuado para almacenamiento a largo plazo de registros procesados
Ejemplo: El archivo ‘dns.log’ genera ‘dns.csv’ que se comprime a ‘dns.zip’ y luego se elimina ‘dns.csv’.
Compatible con PowerShell 5.1+ y Windows Server 2016+.
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-ComputerName
Opcional.
Si se especifica, agrega una columna ComputerName al CSV con el valor indicado.
Útil al consolidar registros de múltiples servidores DNS.
Importante: Esto NO es una función de remoting.
El script procesa solo archivos locales.
Type: String
DefaultValue: ''
SupportsWildcards: false
Aliases:
- Server
- DNSServer
- HostName
ParameterSets:
- Name: (All)
Position: 3
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-Confirm
Solicita confirmación antes de ejecutar el cmdlet.
Cuando se especifica, pide confirmación antes de:
- Procesar cada archivo de registro DNS
- Eliminar archivos fuente (cuando se usa -RemoveSourceFile)
- Sobrescribir archivos de salida existentes
Útil para procesamiento interactivo cuando quieres controlar qué archivos se procesan.
Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- cf
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-Delimiter
Carácter delimitador para la salida CSV.
Por defecto es punto y coma ‘;’
Type: String
DefaultValue: ;
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 2
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
Especifica la cultura para analizar valores de fecha/hora en el registro de depuración DNS.
Los registros de depuración DNS usan el formato de fecha de la configuración regional de Windows del servidor donde se generó el registro.
Este parámetro permite analizar registros de servidores con configuraciones regionales diferentes.
Por defecto es la cultura actual ([System.Globalization.CultureInfo]::CurrentCulture).
Valores comunes de cultura:
- ‘de-DE’ o ‘de-AT’: formato alemán (DD.MM.AAAA o DD/MM/AAAA)
- ’en-US’: formato estadounidense (MM/DD/AAAA)
- ’en-GB’: formato británico (DD/MM/AAAA)
- ‘sv-SE’: formato sueco/ISO (AAAA-MM-DD)
Ejemplo: -InputCulture ‘de-DE’ para registros de un servidor Windows alemán.
Ejemplo: -InputCulture ([System.Globalization.CultureInfo]::GetCultureInfo(‘sv-SE’)) para registros suecos.
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 5
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
Ruta al archivo de registro de depuración DNS a analizar.
Soporta arrays para procesar múltiples archivos.
Type: String[]
DefaultValue: ''
SupportsWildcards: false
Aliases:
- FullName
- FilePath
- InputPath
- File
- Path
ParameterSets:
- Name: (All)
Position: 0
IsRequired: true
ValueFromPipeline: true
ValueFromPipelineByPropertyName: true
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputCulture
Especifica la cultura para formatear valores de fecha/hora en los archivos CSV de salida.
Este parámetro controla cómo se escriben los valores DateTime en la salida CSV.
Es útil cuando los archivos CSV serán consumidos por aplicaciones o sistemas con configuraciones regionales específicas.
Por defecto es la cultura actual ([System.Globalization.CultureInfo]::CurrentCulture).
Valores comunes de cultura:
- ’en-US’: formato estadounidense (MM/DD/AAAA)
- ‘de-DE’: formato alemán (DD.MM.AAAA)
- ’en-GB’: formato británico (DD/MM/AAAA)
- ‘sv-SE’: formato sueco/ISO (AAAA-MM-DD)
Ejemplo: -OutputCulture ’en-US’ para formatear fechas para sistemas de EE. UU.
Ejemplo: -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture) para formato ISO.
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 6
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputFile
Opcional.
Ruta para el archivo CSV de salida.
Si no se especifica, usa el nombre del archivo de entrada con extensión .csv.
Debe ser una ruta de archivo, no un directorio.
Si solo quieres especificar el directorio de salida, omite este parámetro y el script usará el mismo directorio que el archivo de entrada.
Type: String
DefaultValue: ''
SupportsWildcards: false
Aliases:
- Output
- Destination
- OutFile
- OutputPath
ParameterSets:
- Name: (All)
Position: 1
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-OutputType
Especifica el tipo de salida a generar.
Valores válidos:
- ‘CSV’: Genera solo el archivo CSV con datos analizados (predeterminado)
- ‘Statistic’: Genera solo el archivo de estadísticas con datos agregados
- ‘Both’: Genera ambos archivos CSV y estadísticas
Por defecto es ‘Both’.
Type: String
DefaultValue: Both
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: 4
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-RemoveSourceFile
Elimina el archivo de registro de depuración DNS fuente tras un procesamiento exitoso.
Usa este interruptor para borrar automáticamente los archivos de entrada después de que se hayan analizado correctamente y creado los archivos de salida.
Esto es útil para:
- Pipelines automatizados de procesamiento de registros
- Gestión de espacio en disco en escenarios de recopilación de registros
- Evitar reprocesamiento de archivos ya convertidos
Características de seguridad:
- Solo elimina archivos tras procesamiento y creación de salida exitosa
- Omite eliminación si el procesamiento falla o se interrumpe
- No puede usarse con SkipHeaderValidation por seguridad
Advertencia: Los archivos fuente se eliminan permanentemente.
Asegúrate de que los archivos de salida son válidos antes de usar esta opción.
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
Omite la validación del encabezado del archivo de registro de depuración DNS.
Por defecto, el script valida que los archivos de entrada tengan una estructura válida de encabezado de registro de depuración DNS.
Usa este interruptor para procesar archivos sin validación de encabezado, lo que puede ser útil para:
- Procesar formatos de registro modificados o personalizados
- Solucionar problemas de validación
- Procesar registros con encabezados no estándar
Advertencia: Usar este parámetro puede causar errores de procesamiento si el archivo no es un registro DNS válido.
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
-WhatIf
Muestra qué pasaría si se ejecuta el cmdlet.
El cmdlet no se ejecuta.
Cuando se especifica, muestra información detallada sobre las operaciones que se realizarían sin ejecutarlas realmente.
Útil para:
- Previsualizar qué archivos se procesarían
- Verificar rutas de archivos de salida antes de procesar
- Probar scripts antes de ejecutarlos en producción
Type: SwitchParameter
DefaultValue: ''
SupportsWildcards: false
Aliases:
- wi
ParameterSets:
- Name: (All)
Position: Named
IsRequired: false
ValueFromPipeline: false
ValueFromPipelineByPropertyName: false
ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
CommonParameters
Este cmdlet soporta los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable,
-InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable,
-ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para más información, consulta
about_CommonParameters.
ENTRADAS
System.String[]
NOTAS
Versión: 1.2.0.0
Autor: Andreas Bellstedt, Copilot
Fecha: 2026-01-23
Palabras clave: Microsoft, Windows Server, DNSServer, DNS, DebugLog, LogParser
ENLACES RELACIONADOS