# Parámetros y Opciones

> Qué cambia realmente cada opción de Convert-DNSDebugLogFile, cuándo la necesitas y las trampas en las que es fácil caer.

---

LLMS index: [llms.txt](/llms.txt)

---

Esta página explica las opciones en lenguaje sencillo y en el orden en que normalmente las necesitarás. Es una guía, no una especificación: la lista autoritativa y siempre actualizada de parámetros está en la [referencia del comando](../commands/convert-dnsdebuglogfile/) y en:

```powershell
Get-Help Convert-DNSDebugLogFile -Full
```

## La versión corta

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log"
```

Esa sola línea ya te da un comportamiento sensato: archivos de datos y estadísticas, delimitador punto y coma, formato de fecha de tu máquina, validación de encabezado activada, registro fuente sin tocar. Todo lo que sigue es ajuste fino.

| Opción | Predeterminado | Cámbialo cuando |
|---|---|---|
| `-InputFile` | *(requerido)* | siempre |
| `-OutputFile` | ruta de entrada con `.csv` | quieres la salida en otro lugar |
| `-Delimiter` | `;` | tu consumidor espera coma, tabulador o barra vertical |
| `-ComputerName` | vacío | combinas registros de más de un servidor |
| `-OutputType` | `Both` | solo quieres datos, o solo resúmenes |
| `-ContextFilter` | `All` | solo te interesa el tráfico DNS real |
| `-InputCulture` | cultura actual | el registro proviene de un servidor con otra configuración regional |
| `-OutputCulture` | cultura actual | una máquina leerá el CSV |
| `-NoDetailsParsing` | desactivado | importa más el rendimiento que los detalles de los paquetes |
| `-CompressOutput` | desactivado | archivas o transfieres los resultados |
| `-RemoveSourceFile` | desactivado | limpieza programada y confías en la salida |
| `-SkipHeaderValidation` | desactivado | el archivo es válido pero el encabezado es inusual |

## Entrada y salida

### -InputFile

Ruta al registro que se va a convertir. Acepta un arreglo y entrada por canalización — por eso funciona esto:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" | Convert-DNSDebugLogFile
```

`Get-ChildItem` emite objetos con una propiedad `FullName`, y `-InputFile` la acepta por nombre de propiedad (sus alias incluyen `FullName`, `Path`, `FilePath`). No se necesita `ForEach-Object`.

Funcionan rutas locales y rutas SMB/UNC:

```powershell
Convert-DNSDebugLogFile -InputFile "\\dc01\C$\Administration\Logs\DNSServer\dns.log"
```

El comando también puede abrir un registro que el servidor DNS tiene abierto actualmente. Consulta [registros activos](#registros-activos) abajo antes de confiar en eso.

### -OutputFile

Sin esta opción, el CSV se guarda junto al archivo de entrada, con el mismo nombre base y extensión `.csv`. Con ella, controlas el destino.

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Debe ser una ruta de archivo, no una carpeta</div>


`-OutputFile "D:\Processed\"` no significa "escribir dentro de esta carpeta". Debes dar la ruta completa incluyendo el nombre del archivo: `-OutputFile "D:\Processed\dns_data.csv"`.

Esto también significa que `-OutputFile` no tiene sentido cuando canalizas muchos archivos — cada conversión escribiría en el mismo destino. Para ejecuciones por lotes, déjalo sin usar y deja que cada registro produzca su propio CSV.
</div>


### -Delimiter

El valor predeterminado es punto y coma, porque en regiones donde la coma es el separador decimal, eso es lo que Excel espera. Usa `-Delimiter ","` para herramientas y bases de datos que asumen valores separados por comas clásicas, o `` -Delimiter "`t" `` para tabulador.

Sea cual sea tu elección, usa el *mismo* valor en el lado de importación. Un desajuste es la causa número uno de que "todo termine en una sola columna".

## Etiquetado y filtrado

### -ComputerName

Llena la columna `ComputerName`. La columna existe de todas formas; esto solo le da un valor.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ComputerName $env:COMPUTERNAME
```

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Esto no es un parámetro de remoting</div>


A pesar del nombre (y de los alias `-Server` / `-DNSServer` / `-HostName`), `-ComputerName` **no** se conecta a nada. No hay WinRM, ni ejecución remota. Solo escribe una etiqueta en la salida. Para leer un registro remoto, apunta `-InputFile` a una ruta UNC.
</div>


Siempre configúralo cuando varios servidores alimentan un conjunto de datos — de lo contrario no podrás saber después de qué DC proviene una fila.

### -OutputType

- `CSV` — solo archivo de datos
- `Statistic` — solo los dos archivos agregados, sin datos a nivel de fila
- `Both` — los tres archivos *(predeterminado)*

`Statistic` es la opción rápida y pequeña cuando solo necesitas tendencias diarias. `CSV` es adecuado cuando un sistema posterior hace su propia agregación.

### -ContextFilter

Un registro de depuración DNS mezcla tráfico real de consultas con charlas internas del servidor. `-ContextFilter` decide qué pasa a la salida.

```powershell
# solo tráfico DNS real
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet

# tráfico más eventos del servidor, pero sin notas de diagnóstico
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -ContextFilter Packet, Event
```

| Valor | Contiene |
|---|---|
| `All` | todo *(predeterminado)* |
| `Packet` | consultas y respuestas DNS — los datos que la mayoría de análisis necesitan |
| `Event` | eventos del servidor, p. ej. "El servidor DNS ha iniciado" |
| `Note` | notas y advertencias de diagnóstico, p. ej. errores de socket |

Tipos de contexto adicionales (`DSPoll`, `Init`, `Lookup`, `Recurse`, `Remote`, `Tombstone`) aparecen bajo `All`.

Filtrar solo a `Event` o `Note` llena solo `DateTime`, `ThreadId`, `Context` e `Information` — las columnas de protocolo quedan vacías porque esas entradas simplemente no llevan esa información.

`-ContextFilter Packet` es la elección habitual para pipelines de seguridad e informes: elimina el ruido y reduce notablemente la salida.

## Registros internacionales

El servidor DNS escribe marcas de tiempo en la configuración regional de Windows de la máquina donde corre. Un DC alemán escribe `20.01.2026 23:00:16`; un servidor de EE. UU. escribe `1/20/2026 11:00:16 PM`. Si la configuración regional de tu estación de trabajo difiere de la del servidor, el análisis falla — o peor, intercambia día y mes silenciosamente.

### -InputCulture

Indica al analizador qué configuración regional usa el *registro fuente*:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
```

| Cultura | Formato de marca de tiempo en el registro |
|---|---|
| `de-DE` | `DD.MM.YYYY HH:MM:SS` |
| `en-US` | `M/D/YYYY H:MM:SS AM/PM` |
| `en-GB` | `DD/MM/YYYY HH:MM:SS` |
| `sv-SE` | `YYYY-MM-DD HH:MM:SS` |

El valor predeterminado es la cultura de la sesión que ejecuta el comando. En un entorno con configuraciones regionales mixtas, configúralo explícitamente en lugar de confiar en ese valor predeterminado — y recuerda que una tarea programada que corre como `SYSTEM` puede no tener la cultura con la que probaste interactivamente.

### -OutputCulture

Controla cómo se *escriben* las marcas de tiempo en el CSV:

```powershell
# salida tipo ISO que SQL Server, Power BI y pandas entienden
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -OutputCulture 'sv-SE'

# mismo efecto, cultura invariante explícita
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" `
    -OutputCulture ([System.Globalization.CultureInfo]::InvariantCulture)
```

Regla general: si un humano abre el archivo en Excel, usa la cultura local. Si una máquina lo lee, usa `sv-SE` o cultura invariante y olvídate de configuraciones regionales en la importación.

Los dos parámetros son independientes — puedes leer un registro sueco y escribir una salida con formato estadounidense.

## Velocidad y almacenamiento

### -NoDetailsParsing

Si el servidor DNS registra detalles completos de paquetes, el analizador convierte cada bloque de detalles en JSON en la columna `Details`. Eso es útil, pero también la parte más costosa de la ejecución y hace que el CSV crezca.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -NoDetailsParsing
```

La columna permanece presente pero vacía; la línea de encabezado de detalles TCP/UDP sigue disponible en `Information`. En registros con muchos bloques de detalles esto puede reducir el tiempo de procesamiento entre un 30 y 50 %. Úsalo cuando la información a nivel de consulta sea suficiente.

### -CompressOutput

Comprime los archivos CSV generados y elimina los sin comprimir. `dns.log` produce `dns.zip` en lugar de `dns.csv`.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput
```

Un CSV de esta forma típicamente se comprime un 90 % o más, así que esto es un ahorro de almacenamiento casi gratis para archivos de archivo y para enviar archivos por la red.

### -RemoveSourceFile

Elimina el archivo fuente `.log` tras una conversión exitosa — el registro solo se borra si todos los archivos de salida se crearon.

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -CompressOutput -RemoveSourceFile
```

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">La eliminación es permanente</div>


Aquí no hay papelera de reciclaje. Valida tu salida con registros reales antes de activar esto en un trabajo programado, y nunca apuntes a un archivo de registro activo.

El comando se niega deliberadamente a combinar `-RemoveSourceFile` con `-SkipHeaderValidation`, para que no puedas borrar un archivo que nunca se confirmó como un registro DNS.
</div>


## Redes de seguridad

### -SkipHeaderValidation

Por defecto el comando verifica que el archivo realmente sea un registro de depuración del servidor DNS antes de analizarlo. Esto evita el error clásico de apuntar el trabajo a la carpeta equivocada.

Desactívalo solo para casos genuinamente inusuales: registros editados a mano, extractos prefiltrados, formatos personalizados. Manténlo activado en todos los demás casos — es barato y es lo que evita que un error tipográfico produzca un montón de filas basura.

### -WhatIf y -Confirm

El comando soporta ambos. `-WhatIf` es la forma correcta de ver qué tocaría un nuevo trabajo por lotes:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf
```

`-Confirm` pregunta antes de procesar cada archivo, antes de eliminar un archivo fuente y antes de sobrescribir una salida existente.

## Registros activos

`Convert-DNSDebugLogFile` puede leer un archivo que el servidor DNS tiene abierto. Útil para echar un vistazo rápido a lo que está pasando ahora mismo.

<div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">No para ejecuciones programadas o de producción</div>


Un registro activo cambia mientras se lee. La salida puede perder entradas escritas durante la conversión y su último registro puede estar truncado. Repetir la ejecución da un resultado diferente.

Para una salida reproducible, activa la rotación de registros en el servidor DNS y convierte solo archivos cerrados y rotados — por ejemplo, saltando el más nuevo:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile -ComputerName $env:COMPUTERNAME
```
</div>


## Poniéndolo todo junto

Una invocación típica en producción en un controlador de dominio:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 1 |
    Convert-DNSDebugLogFile `
        -ComputerName $env:COMPUTERNAME `
        -Delimiter ';' `
        -OutputType Both `
        -ContextFilter Packet `
        -OutputCulture 'sv-SE' `
        -CompressOutput
```

Se lee así: toma cada registro rotado excepto el activo, conserva solo el tráfico DNS, etiqueta cada fila con el nombre del servidor, escribe marcas de tiempo legibles por máquina y deja archivos comprimidos. La versión completa para tarea programada y directiva de grupo está en el [ejemplo de recopilación dirigida por GPO](../examples/gpo-driven-collection/).
