# Mejores prácticas operativas

> Qué hacer bien antes de dejar que una conversión de registros DNS se ejecute sin supervisión en controladores de dominio en producción.

---

LLMS index: [llms.txt](/llms.txt)

---

Convertir un registro manualmente es fácil. Ejecutarlo cada noche en cada controlador de dominio, durante años, sin que nadie lo revise, es la parte que requiere un poco de diseño. Estos son los puntos que importan en la práctica.

## 1. Convierte los registros rotados, no el activo

Habilita la rotación de registros en el servidor DNS y convierte solo los archivos cerrados. El módulo *puede* leer el registro que el servidor DNS está escribiendo actualmente, pero ese archivo cambia durante la conversión: las entradas más recientes pueden faltar y el último registro puede estar truncado. Dos ejecuciones producen dos resultados diferentes.

El patrón estándar omite el archivo 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 class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">Nunca combines un registro activo con -RemoveSourceFile</div>


Eliminar un archivo que el servidor DNS aún está escribiendo no es algo que quieras descubrir después. Restringe `-RemoveSourceFile` a registros rotados y cerrados.
</div>


Compromiso a tener en cuenta: en un servidor de bajo volumen, la rotación puede tardar más de un día, por lo que los datos del día actual permanecen sin convertir hasta que el archivo rote. Ajusta el umbral de rotación en consecuencia.

## 2. Programa la tarea y dale una identidad que funcione

El Programador de tareas es el lugar habitual para esto — diario es un valor predeterminado sensato. Una implementación completa de Directiva de Grupo para controladores de dominio está documentada en el [ejemplo de recopilación impulsada por GPO](../examples/gpo-driven-collection/), y una tarea independiente en el [ejemplo de tarea programada](../examples/scheduletask/).

Tres cosas suelen causar problemas aquí:

- **Descubrimiento del módulo.** Una tarea que se ejecuta como `SYSTEM` con `-NoProfile` solo ve las rutas de módulos a nivel máquina. Instala el módulo a nivel máquina o añade un `Import-Module` explícito en la acción de la tarea.
- **Cultura.** La cuenta que ejecuta la tarea puede no tener la configuración regional con la que probaste interactivamente. Establece `-InputCulture` y `-OutputCulture` explícitamente en lugar de confiar en el valor predeterminado.
- **Acceso a la red.** Si la fuente o el destino es una ruta UNC, `SYSTEM` se autentica como la cuenta del equipo. Concede permisos de compartición y NTFS a la cuenta del equipo (o al grupo `Domain Controllers`), o ejecuta la tarea como una cuenta de servicio dedicada.

## 3. Rota a un tamaño que puedas procesar

50–200 MB por archivo mantiene las conversiones predecibles y permite que una tarea nocturna termine dentro de su ventana. Un archivo que crece indefinidamente eventualmente no lo hace. Consulta [Rendimiento](../04-performance/).

## 4. Valida las primeras salidas antes de automatizar

Ejecuta la conversión manualmente en dos o tres registros reales y abre el CSV:

- ¿Son correctas las marcas de tiempo — no están intercambiados día/mes? (Si lo están, configura `-InputCulture`.)
- ¿El delimitador coincide con lo que espera tu consumidor?
- ¿Está `ComputerName` poblado?
- ¿Están presentes los contextos que necesitas y filtrados los que no?

`-WhatIf` te muestra qué archivos tocaría un lote antes de tocarlos:

```powershell
Get-ChildItem "C:\Administration\Logs\DNSServer\*.log" |
    Convert-DNSDebugLogFile -RemoveSourceFile -WhatIf
```

## 5. Decide qué hacer con los registros procesados

Una tarea que simplemente convierte "todos los registros excepto el más nuevo" reprocesará los mismos archivos cada noche. Eso es robusto y simple, pero sobrescribe las salidas y puede insertar filas duplicadas en quien las consuma.

Elige una opción:

- mover los archivos `.log` procesados a una carpeta de archivo
- eliminarlos con `-RemoveSourceFile` una vez que confíes en la canalización
- hacer que el recolector posterior deduplique

Cualquiera que elijas, anótalo — este es el detalle que confunde al siguiente administrador.

## 6. Planifica almacenamiento y retención

La compresión (`-CompressOutput`) suele reducir el CSV en un 90 % o más, pero el volumen sigue acumulándose. Estima según tu tasa real de consultas y tu obligación de retención, y establece una fecha límite para los datos en lugar de dejarlos crecer indefinidamente.

`-OutputType Statistic` vale la pena considerarlo para retenciones largas: los resúmenes diarios son pequeños y a menudo responden las preguntas de tendencia para las que se mantenían los datos a nivel de fila antiguos.

## 7. Trata la salida como sensible

Los registros DNS analizados describen tu estructura interna de nombres y quién consultó qué. Eso es más revelador que la mayoría de los registros de infraestructura y, dependiendo de tu jurisdicción, puede considerarse dato personal.

- Restringe los permisos NTFS y de compartición en las carpetas de salida.
- No dejes CSVs en un recurso compartido de archivos general "temporalmente".
- Incluye los datos de registros DNS en tu política de retención y eliminación, no solo en la de respaldo.
- La salida comprimida es más pequeña, no protegida — usa cifrado o control de acceso donde importe.

## 8. Mantén la validación de encabezados activada

La comprobación predeterminada de que un archivo realmente es un registro de depuración DNS no cuesta nada y evita que una ruta mal escrita produzca miles de filas sin sentido. Usa `-SkipHeaderValidation` solo para formatos genuinamente inusuales — y ten en cuenta que el comando se niega a combinarlo con `-RemoveSourceFile` por esta misma razón.

## 9. Supervisa la tarea, no solo el servidor

Una conversión sin supervisión que se detiene silenciosamente es peor que no tener conversión, porque la brecha solo se nota cuando alguien necesita los datos.

- Vigila la salida de error distinta de cero; la implementación de referencia con GPO lanza deliberadamente error cuando `$Error.Count -gt 0` para que la tarea reporte fallo.
- Alerta sobre el código de resultado de la última ejecución de la tarea programada, no solo sobre si la tarea existe.
- Verifica que los archivos de salida realmente aparezcan con marcas de tiempo recientes.
- Vigila el espacio libre en disco tanto en el volumen de registros como en el destino de salida.

Las causas comunes de una ejecución fallida — acceso denegado, registros corruptos, encabezados inválidos — se cubren en [Solución de problemas](../08-troubleshooting/).

## 10. Documenta el flujo de trabajo

Dónde se escriben los registros, cuándo se ejecuta la tarea, qué parámetros se usan, a dónde va la salida, quién la consume y cuánto tiempo se conserva. Seis líneas en tu wiki de operaciones. Eso es lo que hace que la configuración sea auditable y transferible.
