Ejecute la aplicación o script en la conexión RDC de Windows

7

Verifiqué otro hilo ( Ejecutar automáticamente un script cuando inicio sesión en Windows ) , pero no resolvió mi problema exacto.

Necesito ejecutar un script cuando se realiza una conexión a través de mi red utilizando la Conexión de escritorio remoto de Windows .

El hilo mencionado anteriormente funciona para el inicio de sesión inicial , sin embargo, si no cierro sesión (lo cual es necesario para algunos procesos que se ejecutan en mi red), no volverá a ejecutar el script la próxima vez que alguien se conecte al sistema usando conexión de escritorio remoto. Anteriormente estábamos usando pcAnywhere para lograr esto, sin embargo, después de encontrar algunos problemas gráficos con pcAnywhere, hemos decidido alejarnos de él a RDC.

Antecedentes: necesitamos que se envíe un correo electrónico cada vez que se establezca una conexión con máquinas particulares. El nombre de inicio de sesión siempre será el mismo para esos sistemas y no cerramos la sesión al cerrar la conexión.

Nick Larsen
fuente

Respuestas:

4

Que yo sepa, Windows no proporciona un método integrado para ejecutar un programa o script en la conexión , solo inicie sesión. Necesitará encontrar un programa que se registre con Windows (usando WTSRegisterSessionNotification ) y escuche el mensaje WM_WTSSESSION_CHANGE .

Un programa que haga lo anterior recibirá notificaciones de Windows sobre los inicios de sesión, los cierres de sesión, las conexiones, las desconexiones y todos los eventos necesarios para iniciar un script en la conexión, así como para iniciar sesión.

Fuera de mi cabeza, no conozco ninguna aplicación (aparte de pcAnywhere) que pueda hacer esto.

Joshua
fuente
Esto es casi el 100% de lo que necesito. Pude extender el contenedor en la página que proporcionó rápidamente para verificar que funcionó para mis necesidades. Ahora necesito obtener el nombre de la máquina que se conecta y su usuario conectado actualmente. ¿Sabes dónde sacar esa información de tu cabeza?
Nick Larsen
1
Al profundizar un poco más, descubrí que ya hay un contenedor para mis necesidades. msdn.microsoft.com/en-us/library/…
Nick Larsen
7

Puede realizar una nueva tarea programada y definir el desencadenador en "En el momento de una nueva conexión a una sesión de usuario"

Laurent F
fuente
"Estamos buscando respuestas largas que brinden alguna explicación y contexto. No solo dé una respuesta de una línea; explique por qué su respuesta es correcta, idealmente con citas. Las respuestas que no incluyen explicaciones pueden eliminarse".
gparyani
1
@gparyani, esta es toda la información que necesitaba. No hay necesidad de un montón de capturas de pantalla, si me preguntas.
Arjan
0

Si está familiarizado con la programación en .net, es posible que desee ver este hilo en Stack Overflow .

De acuerdo con Steven A. Lowe:

presuntamente,

System.Windows.Forms.SystemInformation.TerminalServerSession será cierto para una sesión de escritorio remoto (o sesión de VNC)

También puede supervisar una conexión en el RDP, que por defecto es TCP 3389.

Jared Harley
fuente
1
Si bien .TerminalServerSession debe volver verdadero cuando se establece una conexión, no hay evento para disparar. Además, cuando un usuario se desconecta y el programa aún se está ejecutando, seguirá siendo verdadero para ejecutarse en una sesión de servidor terminal y no tendrá conocimiento cuando el usuario se vuelva a conectar.
Joshua
0

Utilice el disparador "En conexión con la sesión del usuario"

Nota: Solo noté que la pregunta está etiquetada "XP" / "Server2008". Lo que está aquí solo puede funcionar en Vista / 2008R2 en adelante.

El programador de tareas de Windows tiene un activador predefinido para eso. Se llama On connection to user session.

También le permite distinguir entre usuarios y entre conexiones locales o remotas.

El valor predeterminado al crear este activador: Any usery Connection from remote computer. Esto parece ser lo que quieres, por lo que no tienes que cambiar eso.

Captura de pantalla aquí: Captura de pantalla del disparador

Fuente: Microsoft TechNet: Programador de tareas | Disparadores (Archivado aquí ).

Otras lecturas

Cuando exporta esta tarea y luego mira dentro del archivo, verá que esto es un desencadenante de tipo SessionStateChangeTrigger: Detalle de disparo hay documentación detallada sobre MSDN:

StackzOfZtuff
fuente