Desactivar la transcripción automática de PowerShell en Windows 11 y evitar su sincronización con OneDrive

¿Cada vez que abres Windows Terminal o la consola de PowerShell aparece en tu carpeta Documentos un subdirectorio con la fecha del día y un archivo «.txt» que recopila absolutamente todo lo que escribiste y todo lo que devolvió la sesión? No es un virus ni un fallo de OneDrive: es la transcripción automática de PowerShell, una característica pensada para auditoría que muchas organizaciones activan por política de grupo. A continuación aprenderás —paso a paso— a detectar si está activa por GPO o por un script local, a detenerla temporal o definitivamente y, si lo prefieres, a redirigir sus salidas para que no inunden Documentos ni tu nube.

Índice

Resumen del problema

Cuando la transcripción está habilitada, PowerShell crea al iniciar la consola una carpeta con el formato PowerShell_transcript.{yyyyMMdd}-{hhmmss} bajo Documentos. Dentro aloja un fichero de texto con toda la sesión: comandos, errores, advertencias, flujo detallado (verbose) e incluso metadatos del host y del usuario. Si Documentos está sincronizado con OneDrive —algo habitual en equipos con Windows 11 Home, Pro o Enterprise— esos logs viajan a la nube, ocupan espacio y pueden exponer información sensible.

¿Por qué aparece y quién la activó?

Existen tres vías para que la transcripción se active:

  1. Política de grupo: la opción “Habilitar transcripción” (GPO) se define a nivel de dominio o de equipo local.
  2. Registro local: alguien (o algún instalador) añadió EnableTranscripting=1 en las claves de Policies.
  3. Script manual: dentro de un perfil o de un módulo se ejecuta Start-Transcript.

En entornos corporativos suele tratarse del primer caso, porque la transcripción es un requisito de auditoría para ISO 27001, PCI‑DSS o normas similares.

Comprobación rápida con el Registro

Antes de tocar nada, confirma qué ruta lo activa:

Get-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows\PowerShell\Transcription','HKCU:\Software\Policies\Microsoft\Windows\PowerShell\Transcription' `
                 -Name EnableTranscripting,OutputDirectory -ErrorAction SilentlyContinue
  • Si ves EnableTranscripting : 1 la transcripción está activa en esa rama;
  • Si la propiedad no existe o vale 0, busca en la otra rama o en los perfiles de usuario;
  • La propiedad OutputDirectory indica si alguien cambió la ruta por defecto.

Interpretación de los resultados

HKLM (HKEYLOCALMACHINE) afecta a todos los usuarios del equipo. Normalmente implica una GPO de nivel máquina.
HKCU (HKEYCURRENTUSER) afecta solo al usuario actual. Puede ser una GPO de usuario o un script que se ejecutó con privilegios de ese usuario.

Detener la transcripción en la sesión actual

Si solo necesitas ahora mismo dejar de registrar, basta con ejecutar:

Stop-Transcript

Recibirás un mensaje confirmando que se cerró el fichero. No obstante, la próxima vez que abras la consola el proceso volverá a iniciarse si la política sigue habilitada.

Deshabilitarla permanentemente

Opción A — Política de grupo local o de dominio

  1. Ejecuta gpedit.msc. (En ediciones Home puede que no esté; usa la Opción B).
  2. Navega a Configuración del equipo > Plantillas administrativas > Componentes de Windows > Windows PowerShell > Habilitar transcripción.
  3. Cambia el ajuste a “Deshabilitada” o “No configurada”.
  4. Abre una consola y lanza gpupdate /force para aplicar cambios inmediatamente.

Opción B — Eliminar la clave del Registro

Abre PowerShell como administrador y copia:

Remove-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows\PowerShell\Transcription' `
                    -Name EnableTranscripting -ErrorAction SilentlyContinue

Remove-ItemProperty -Path 'HKCU:\Software\Policies\Microsoft\Windows\PowerShell\Transcription' \`
-Name EnableTranscripting -ErrorAction SilentlyContinue

El comando borra la propiedad EnableTranscripting en ambos contextos sin lanzar errores si no existe.

¿Necesitas seguir registrando pero en otra carpeta?

Cuando la auditoría es obligatoria, lo recomendable es indicar un directorio centralizado, por ejemplo C:\Logs\PowerShell, que no sincronice con OneDrive ni se borre con el perfil.

Set-ItemProperty -Path 'HKLM:\Software\Policies\Microsoft\Windows\PowerShell\Transcription' `
                 -Name OutputDirectory -Value 'C:\Logs\PowerShell' -Type String

Tras aplicar la política, cada nueva sesión colocará el archivo en la ruta definida y mantendrá la fecha y hora en el nombre para evitar colisiones.

Ventajas y desventajas de la transcripción

AspectoVentajasDesventajas
Seguridad y auditoríaRegistro completo de comandos y resultados, indispensable en sectores regulados.Exposición de datos confidenciales si se replica a la nube. Crece rápido en entornos de scripting intensivo.
Resolución de problemasFacilita reproducir pasos al soporte y documentar bugs.Genera ruido al usuario final y consume espacio en SSD / OneDrive.
Cumplimiento normativoPermite evidenciar quién ejecutó qué y cuándo.Requiere políticas de retención y limpieza para evitar terabytes de texto.

Alternativas menos invasivas

PowerShell ofrece otros métodos de registro que no revelan todo el contenido de la sesión:

  • Script Block Logging: guarda solo el bloque de script tras su evaluación. Se habilita en Windows Event Log.
  • Event Tracing for Windows (ETW): eventos de nivel kernel que se pueden dirigir a un SIEM.
  • Advanced Audit Policy: categorías como “Logon/Logoff” y “Process Creation” proporcionan contexto sin exponer variables ni resultados.

Automatizar la limpieza de transcripciones antiguas

Si decides mantenerlas, añade una tarea programada que borre las que superen cierto tiempo:

$days = 90
$path = 'C:\Logs\PowerShell'
Get-ChildItem -Path $path -Filter *.txt -Recurse |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$days) } |
    Remove-Item -Force

De este modo cumples requisitos de retención (p.ej. 90 días) y evitas saturar el disco.

Preguntas frecuentes

¿La transcripción afecta también a PowerShell 7?

Sí. Desde la versión 5.1 todas las ediciones de PowerShell respetan las mismas políticas, incluidas las instaladas mediante winget.

¿Qué ocurre si el usuario no tiene permisos de escritura en la carpeta indicada?

PowerShell intentará crearla en el primer lugar disponible del perfil. Si no puede, la consola muestra una advertencia pero la sesión continúa sin transcripción.

¿Puedo iniciar la transcripción solo para un script concreto?

Sí. Dentro del propio script llama a Start-Transcript -Path 'C:\Ruta\MiLog.txt' y recuerda finalizar con Stop-Transcript. Esto ignora políticas globales.

¿La transcripción captura contraseñas introducidas por Read-Host -AsSecureString?

No. Los campos seguros aparecen como System.Security.SecureString. Sin embargo, si converte el valor a texto plano más adelante, el contenido sí queda registrado.

Conclusión

La transcripción automática es una poderosa aliada cuando necesitas evidencias forenses o trazabilidad completa, pero se convierte en un dolor de cabeza si solo utilizas PowerShell para tareas rutinarias. Desactivarla (o redirigirla) es tan simple como modificar una política o un valor del Registro. Antes de hacerlo, revisa los requisitos de tu empresa: quizá el departamento de seguridad la activó por mandato legal. Si no existe tal necesidad, deshabilitar EnableTranscripting detiene la creación diaria de carpetas y evita que tus comandos acaben flotando en OneDrive.

Profundizando un poco más, conviene recordar que la transcripción captura no solo los comandos que escribes sino también los que se generan dinámicamente mediante pipelines o se expanden a través de bucles ForEach‑Object. Esto significa que, en scripts de automatización intensivos, un único fichero puede llegar fácilmente a cientos de megabytes si la salida no se filtra o se redirige. Además, al incluir marcas de tiempo con resolución de milisegundos, es posible reconstruir la línea temporal exacta de ejecución, lo cual es positivo para auditoría pero negativo para la privacidad del desarrollador.

Otro punto de atención es el rendimiento. Aunque escribir en disco es rápido, la llamada a Add-Content que PowerShell utiliza internamente se ejecuta en cada iteración del prompt. En escenarios con bucles rápidos, la sobrecarga puede percibirse como retroceso en comparación con una consola sin transcripción. Si notas retraso, comprueba el contador de E/S y la velocidad de tu SSD; redirigir la salida a un disco secundario suele mejorar la experiencia.

Finalmente, si eres administrador de dominio y quieres aplicar la transcripción solo a servidores críticos (p.ej. controladores de dominio o bastiones), crea una GPO filtrada por Security Filtering o utiliza WMI Filtering para limitarla según el valor Win32_OperatingSystem.ProductType. Así evitas inundar las estaciones de trabajo y mantienes cobertura donde realmente aporta valor de auditoría.

Con estos consejos dispones de un mapa completo: localizar la configuración, detenerla temporal o permanentemente, personalizar la carpeta de salida y, en su caso, implementar retención y filtrado inteligente. Ponlo en práctica hoy mismo y recupera el control de tus Documentos.

Índice