# Convert-DNSDebugLogFile

LLMS index: [llms.txt](/v1.2.1.0/llms.txt)

---

## SINOPSIS

Transforma los registros de depuración del servidor DNS de Windows en un formato CSV estructurado para análisis e informes.

## SINTAXIS

### __AllParameterSets

```
Convert-DNSDebugLogFile [-InputFile] <string[]> [[-OutputFile] <string>] [[-Delimiter] <string>]
 [[-ComputerName] <string>] [[-OutputType] <string>] [[-ContextFilter] <string[]>]
 [[-InputCulture] <cultureinfo>] [[-OutputCulture] <cultureinfo>] [-SkipHeaderValidation]
 [-RemoveSourceFile] [-CompressOutput] [-NoDetailsParsing] [-WhatIf] [-Confirm] [<CommonParameters>]
```

## ALIAS

Este cmdlet tiene los siguientes alias,

## DESCRIPCIÓN

Convierte archivos de registro de depuración del servidor DNS de Windows en datos CSV estructurados que pueden analizarse en Excel, Power BI, bases de datos SQL o herramientas SIEM.  
Diseñado para análisis de seguridad, monitoreo de rendimiento, solución de problemas e informes de cumplimiento.

El cmdlet analiza los registros de depuración DNS y escribe una salida CSV consistente para análisis.  
La salida CSV contiene 18 columnas, incluyendo una columna `Information` para texto de eventos/diagnósticos, una columna JSON opcional `Details` para bloques de detalles de paquetes, y una columna `ComputerName` siempre presente (vacía a menos que se especifique).

CARACTERÍSTICAS PRINCIPALES:  
- Procesamiento en streaming que evita cargar el archivo completo en memoria (adecuado para registros muy grandes)  
- Análisis de alto rendimiento optimizado para archivos grandes (más de 100MB)  
- Delimitador CSV personalizable (por defecto: punto y coma)  
- Resúmenes estadísticos opcionales con métricas agregadas  
- Filtrado por contexto (Packet, Event, Note y contextos adicionales) para enfocarse en tipos específicos de entradas de registro  
- Análisis y formato de fechas conscientes de la cultura para servidores internacionales  
- Soporte para canalización para procesamiento por lotes de múltiples archivos  
- Compresión opcional de archivos de salida (formato ZIP)  
- Eliminación automática opcional de archivos fuente tras el procesamiento  
- Validación de encabezados para asegurar la integridad de los datos

FORMATO DE SALIDA:  
La columna ComputerName siempre se incluye al final de cada registro.  
Si no se especifica el parámetro -ComputerName, la columna estará vacía.  
Esto asegura una estructura de salida consistente para escenarios de consolidación de múltiples servidores.

RENDIMIENTO:  
Optimizado usando StreamReader/StreamWriter con buffers de 64KB, procesamiento en streaming para manejo eficiente en memoria de archivos grandes, operaciones con cadenas en lugar de expresiones regulares, generación manual de CSV y recolección eficiente de estadísticas basada en tablas hash.

COMPATIBILIDAD:  
- PowerShell 5.1+ (ediciones Desktop y Core)  
- Windows Server 2016+  
- Formatos de registro DNS Server desde 2012 R2 hasta 2025

## EJEMPLOS

### EJEMPLO 1

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
```

Convierte el registro de depuración DNS usando la configuración predeterminada (archivos de datos y estadísticas con delimitador punto y coma).  
Salida:  
- C:\Logs\dns.csv  
- C:\Logs\dns_Statistic.csv  
- C:\Logs\dns_PacketStatistic.csv

### EJEMPLO 2

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType CSV
```

Genera solo el archivo de datos sin estadísticas.  
Salida: C:\Logs\dns.csv

### EJEMPLO 3

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputType Statistic
```

Genera solo el archivo de estadísticas con métricas agregadas.  
Salida:  
- C:\Logs\dns_Statistic.csv  
- C:\Logs\dns_PacketStatistic.csv

### EJEMPLO 4

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputFile "C:\Output\parsed.csv"
```

Convierte el registro a una ubicación de salida personalizada.  
Salida: C:\Output\parsed.csv

### EJEMPLO 5

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter "," -ComputerName "DNS01" -OutputType Both
```

Convierte con delimitador coma y añade la columna ComputerName con valor "DNS01".  
Salida:  
- C:\Logs\dns.csv  
- C:\Logs\dns_Statistic.csv  
- C:\Logs\dns_PacketStatistic.csv

### EJEMPLO 6

```powershell
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -OutputType Both
```

Procesa por lotes múltiples archivos de registro de depuración DNS mediante canalización.  
Salida: Para cada archivo .log, genera archivos .csv y _statistic.csv

### EJEMPLO 7

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
```

Convierte y comprime la salida en un archivo ZIP.  
Salida: C:\Logs\dns.zip (contiene dns.csv + archivos de estadísticas)

### EJEMPLO 8

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -RemoveSourceFile -Verbose
```

Convierte el registro y elimina el archivo fuente tras un procesamiento exitoso.  
La salida detallada confirma la eliminación del archivo.

### EJEMPLO 9

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -InputCulture 'de-DE' -OutputCulture 'en-US'
```

Analiza el formato de fecha alemán (DD.MM.AAAA) y lo convierte al formato estadounidense (MM/DD/AAAA).  
Útil al procesar registros de servidores con configuraciones regionales diferentes.

### EJEMPLO 10

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet'
```

Convierte solo las entradas de paquetes de consulta/respuesta DNS, excluyendo entradas EVENT y Note.  
Útil para enfocar el análisis en el tráfico DNS real.

### EJEMPLO 11

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter 'Packet','Event'
```

Convierte tanto paquetes de consulta/respuesta DNS como eventos del servidor, excluyendo Note y otras entradas.  
Útil para analizar el tráfico DNS junto con el contexto de eventos del servidor.

### EJEMPLO 12

```powershell
PS C:\> Get-ChildItem "C:\Logs\*.log" | Convert-DNSDebugLogFile -RemoveSourceFile -CompressOutput
```

Archivado automático de registros: procesa todos los registros, comprime la salida y elimina los archivos fuente.  
Ideal para pipelines programados de procesamiento de registros.

### EJEMPLO 13

```powershell
PS C:\> Convert-DNSDebugLogFile -InputFile "C:\Logs\large-dns.log" -NoDetailsParsing
```

Procesa un archivo de registro grande con el análisis de detalles deshabilitado para máxima velocidad.  
Los bloques de detalle PACKET se omiten, dejando la columna Details vacía.  
Útil para archivos muy grandes cuando no se necesita analizar la estructura detallada del paquete.

## 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.

Beneficios:  
- Reduce significativamente el espacio en disco (los archivos CSV suelen comprimirse más del 90%)  
- Simplifica la gestión y archivado de archivos  
- Adecuado para almacenamiento a largo plazo

Ejemplo: El archivo de entrada 'dns.log' genera 'dns.csv' que se comprime a 'dns.zip' y luego se elimina 'dns.csv'.

```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

Especifica el valor para la columna ComputerName en la salida CSV.  
La columna ComputerName siempre está presente en la salida; si no se especifica este parámetro, la columna estará vacía.

Úsalo cuando consolides registros de múltiples servidores DNS para identificar el servidor origen en conjuntos de datos combinados.

Nota: Este NO es un parámetro de remoting.  
Solo etiqueta la salida.  
Si apuntas -InputFile a una ruta UNC, el archivo se lee desde esa ruta (no se realiza ejecución remota ni WinRM).

```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 de depuración 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: ''
```

### -ContextFilter

Filtra qué tipos de entradas de registro incluir en la salida.  
Acepta uno o varios valores.

Los registros de depuración DNS contienen diferentes tipos de contexto:  
- PACKET: Información de paquetes de consulta y respuesta DNS (datos principales)  
- EVENT: Eventos del servidor DNS (por ejemplo, "El servidor DNS ha iniciado.")  
- Note: Notas y advertencias diagnósticas (por ejemplo, errores de socket, estados internos)  
- DSPoll, Init, Lookup, Recurse, Remote, Tombstone: Tipos de contexto adicionales

Valores válidos:  
- 'All': Incluye todos los tipos de contexto (predeterminado)  
- 'Packet': Incluye solo entradas PACKET (consultas/respuestas DNS)  
- 'Event': Incluye solo entradas EVENT (eventos del servidor)  
- 'Note': Incluye solo entradas Note (información diagnóstica)  
- Cualquier combinación: especifica múltiples valores para incluir tipos de contexto específicos

Predeterminado: All

Ejemplos:  
- 'Packet' filtra solo tráfico DNS  
- 'Packet','Event' incluye tráfico DNS y eventos del servidor  
- 'Note','Event' incluye notas diagnósticas y eventos del servidor

Nota: Al filtrar por 'Event' o 'Note', solo las columnas DateTime, ThreadId, Context e Information contendrán datos.  
Las demás columnas (Protocol, ClientIP, etc.) estarán vacías.

```yaml
Type: String[]
DefaultValue: "@('All')"
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 5
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -Delimiter

Especifica el carácter delimitador para la salida CSV.

Predeterminado: Punto y coma (;)

Alternativas comunes: Coma (,), Tabulación (`t), Barra vertical (|)

Usa punto y coma en regiones donde la coma es el separador decimal (Europa).  
Usa coma para herramientas CSV estándar y bases de datos que esperan valores separados por 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/locale para analizar valores de fecha/hora en el registro de depuración DNS.

Los registros de depuración del servidor DNS usan el formato de fecha de la configuración regional de Windows en el servidor donde se generó el registro.  
Usa este parámetro al procesar registros de servidores con configuraciones regionales diferentes.

Predeterminado: Cultura actual

Ejemplos comunes:  
- 'de-DE' o 'de-AT': Formato alemán (DD.MM.AAAA o DD/MM/AAAA)  
- 'en-US': Formato estadounidense (MM/DD/AAAA con AM/PM)  
- 'en-GB': Formato británico (DD/MM/AAAA con hora 24h)  
- 'sv-SE': Formato sueco/ISO (AAAA-MM-DD)

```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: ''
```

### -InputFile

Especifica la ruta del archivo de registro de depuración DNS a analizar.  
Soporta arrays para procesar múltiples archivos.

Acepta entrada por canalización desde Get-ChildItem u otros cmdlets que produzcan 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: ''
```

### -NoDetailsParsing

Omite el análisis de los bloques de detalle PACKET en formato JSON estructurado.

Cuando se especifica, los registros PACKET con bloques de detalle tendrán la línea de información TCP/UDP en la columna Information, pero la columna Details permanecerá vacía.  
Esto mejora significativamente el rendimiento al procesar archivos grandes cuando no se necesita analizar la estructura detallada del paquete.

Usa este interruptor cuando:  
- Procesas archivos de registro muy grandes (más de 100MB) y solo necesitas información básica de consultas  
- No se requiere la estructura detallada (banderas de mensaje, secciones DNS) para el análisis  
- Prioriza la velocidad de análisis sobre la completitud de datos

Impacto en rendimiento: puede mejorar la velocidad de procesamiento entre 30-50% para registros con muchos bloques de detalle PACKET.

```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: ''
```

### -OutputCulture

Especifica la cultura/locale para formatear valores de fecha/hora en los archivos CSV de salida.

Controla cómo se escriben los valores DateTime en el CSV.  
Úsalo cuando los archivos CSV serán consumidos por aplicaciones o sistemas con configuraciones regionales específicas.

Predeterminado: Cultura actual

Ejemplos comunes:  
- 'en-US': Formato estadounidense (MM/DD/AAAA)  
- 'de-DE': Formato alemán (DD.MM.AAAA)  
- 'sv-SE' o InvariantCulture: Formato ISO (AAAA-MM-DD) para máxima compatibilidad

```yaml
Type: CultureInfo
DefaultValue: '[System.Globalization.CultureInfo]::CurrentCulture'
SupportsWildcards: false
Aliases: []
ParameterSets:
- Name: (All)
  Position: 7
  IsRequired: false
  ValueFromPipeline: false
  ValueFromPipelineByPropertyName: false
  ValueFromRemainingArguments: false
DontShow: false
AcceptedValues: []
HelpMessage: ''
```

### -OutputFile

Especifica la ruta para el archivo CSV de salida.  
Si no se especifica, usa el nombre del archivo de entrada con extensión .csv en el mismo directorio que el archivo de entrada.

Importante: Debe ser una ruta de archivo, no un directorio.  
Si quieres usar el directorio del archivo de entrada con un nombre personalizado, especifica la ruta completa incluyendo el nombre del archivo.

```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 de datos con todas las entradas analizadas  
- 'Statistic': Genera solo los archivos de estadísticas con métricas agregadas  
- 'Both': Genera archivos de datos y estadísticas (predeterminado)

Predeterminado: Both

Cuando se generan estadísticas, se crean dos archivos separados:  
- '_Statistic.csv': Conteos resumidos por tipo de contexto y día (Fecha, Contexto, Conteo, ComputerName)  
- '_PacketStatistic.csv': Conteos detallados de PACKET por día según IP cliente, protocolo, dirección y tipo de consulta (Fecha, ClientIP, Protocolo, Dirección, TipoPregunta, Conteo, ComputerName)

```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.

Úsalo para pipelines automáticos de procesamiento de registros o gestión de espacio en disco.  
El archivo fuente solo se elimina si el procesamiento finaliza correctamente y se crean todos los archivos de salida.

Seguridad: No puede usarse junto con -SkipHeaderValidation para evitar eliminación accidental de archivos inválidos.

Advertencia: Los archivos fuente se eliminan permanentemente.  
Asegúrate de que los archivos de salida sean 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 registro de depuración DNS.

Por defecto, el cmdlet valida que los archivos de entrada tengan un encabezado válido de registro de depuración del servidor DNS.  
Usa este interruptor para procesar archivos sin validación, útil para:  
- Formatos de registro modificados o personalizados  
- Solución de problemas de validación  
- Registros no estándar o preprocesados

Advertencia: 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é sucederí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.7.1.1  
Autor    : Andi Bellstedt, Copilot  
Fecha    : 2026-01-26  
Palabras clave : Microsoft Windows Server, DNSServer, DNS, DebugLog, LogParser

## ENLACES RELACIONADOS

- [github.com/AndiBellstedt/DNSServer.DebugLogParser](https://github.com/AndiBellstedt/DNSServer.DebugLogParser)
