DEV Community

Cover image for Automatización de carga de escenas OBS en Windows
Ivaj O'Franc
Ivaj O'Franc

Posted on • Edited on • Originally published at dev.to

Automatización de carga de escenas OBS en Windows

id: 2788027
title: "Automatización de carga de escenas OBS en Windows"
published: true
tags: ["obs", "powershell", "windows", "automation"]
series: "Lo Arreglé y No  Cómo"
description: "🎬 Lo arreglé y no  cómo: Automatización de carga de escenas OBS en Windows   🇬🇧 Also read..."
canonical_url: "https://dev.to/ivajofranc/automatizacion-de-carga-de-escenas-obs-en-windows-4al2"
cover_image: "https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5afeg9yiacrvhcc0law.png"
Enter fullscreen mode Exit fullscreen mode

🎬 Lo arreglé y no sé cómo: Automatización de carga de escenas OBS en Windows

🇬🇧 Also read this post in English

Todo empezó con algo que parecía sencillo: quería que cada vez que cualquier usuario iniciara sesión en un PC, se copiara automáticamente un archivo de escenas de OBS (scenes.json) en su perfil. En teoría, solo era un script de PowerShell. En la práctica, fue otra historia.


🧩 El script PowerShell básico

Primero armé el script copiar_escenas_test.ps1, que básicamente se encargaba de copiar el archivo scenes.json a la carpeta de escenas de OBS en el perfil del usuario:

$origen = "C:\Ruta\Origen\scenes.json"
$destinoDir = "$env:APPDATA\obs-studio\basic\scenes"
$destino = Join-Path -Path $destinoDir -ChildPath "scenes.json"

if (!(Test-Path -Path $destinoDir)) {
    New-Item -ItemType Directory -Path $destinoDir -Force | Out-Null
}

Copy-Item -Path $origen -Destination $destino -Force
Enter fullscreen mode Exit fullscreen mode

Sencillo, ¿no? Pues ahora había que hacer que se ejecutara en cada inicio de sesión.


🔍 Primeras ideas: la vía oficial (GPO)

La primera solución que pensé fue: usar una GPO en Active Directory para lanzar el script al inicio de sesión del usuario.

En papel, perfecto: centralizado, controlado y con logs.

En la realidad… demasiado pesado para un solo equipo. Decidí buscar algo más simple.


🚀 La alternativa: carpeta de inicio común

Me fui por la clásica carpeta de inicio:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
Enter fullscreen mode Exit fullscreen mode

Primer intento: un acceso directo con .bat

Hice un .bat que creaba un acceso directo para ejecutar el PowerShell. Funcionó, pero con un detalle incómodo: se abría la ventana de PowerShell al iniciar sesión. Visualmente quedaba feo.


🛠 La solución final: un .vbs para esconderlo

El truco fue interponer un .vbs que ejecutara el script de PowerShell oculto:

Set objShell = CreateObject("Wscript.Shell")
objShell.Run "powershell.exe -ExecutionPolicy Bypass -File \"C:\Ruta\copiar_escenas_test.ps1\"", 0, False
Enter fullscreen mode Exit fullscreen mode

Y luego un .bat para crear el acceso directo hacia ese .vbs:

@echo off
set startup=%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
powershell "$s=(New-Object -COM WScript.Shell).CreateShortcut('%startup%\Copiar escenas test.lnk');$s.TargetPath='wscript.exe';$s.Arguments='\"C:\Ruta\oculto_test.vbs\"';$s.WorkingDirectory='C:\Ruta';$s.Save()"
Enter fullscreen mode Exit fullscreen mode

Ahora sí: se ejecutaba al inicio de sesión, sin ventanas molestas y sin depender de privilegios raros.


🧪 Comprobación silenciosa

Para asegurarme de que todo funcionaba, añadí un log al final del .ps1:

Add-Content "$env:TEMP\obs_test_log.txt" "Copiado el $(Get-Date)"
Enter fullscreen mode Exit fullscreen mode

Así podía verificarlo sin preguntar a los usuarios.


✅ Resultado

  • Cada inicio de sesión copia el archivo scenes.json al perfil correcto.
  • La ejecución es invisible para el usuario.
  • No requiere permisos de administrador.
  • No hubo que tocar políticas de ejecución globales.

En resumen: parecía un lío, pero quedó funcionando fino. Otro caso de “Lo arreglé y no sé cómo”.

Top comments (0)