# Convert-DNSDebugLogFile

LLMS index: [llms.txt](/v1.0.0.0/llms.txt)

---

## 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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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

```powershell
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+.

```yaml
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.

```yaml
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.

```yaml
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 ';'

```yaml
Type: String
DefaultValue: ;
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 2
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -InputCulture

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.

```yaml
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: ''
```

### -InputFile

Ruta al archivo de registro de depuración DNS a analizar.  
Soporta arrays para procesar múltiples archivos.

```yaml
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.

```yaml
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.

```yaml
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'.

```yaml
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.

```yaml
Type: SwitchParameter
DefaultValue: False
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: Named
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -SkipHeaderValidation

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.

```yaml
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

```yaml
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](https://go.microsoft.com/fwlink/?LinkID=113216).

## 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

- [github.com/AndiBellstedt/DNSServer.DebugLogParser](https://github.com/AndiBellstedt/DNSServer.DebugLogParser)
