Rocketbot Addon: Remote Desktop Helper

Cree un archivo .rdp para conectarse a un Escritorio remoto automáticamente

Un problema común, que suele presentarse al enviar a producción un bot en el servidor de tu cliente, es que el mismo por políticas de IT de la empresa no permite mantener la sesión al desconectarse. Aun cuando se utilice realice la desconexión vía TSCON (Documentación: RPA en Servidores Virtuales – Rocketbot Docs).

Como solución a este inconveniente y para que no sea necesario intervenir manualmente en la apertura del ambiente para que el/los bot/os programados puedan ejecutarse correctamente, se puede crear un nuevo usuario en el mismo ambiente (que no este sujeto a las políticas del ambiente productivo) que solo cumpla la función de ejecutar un archivo .rdp que se conecte al ambiente donde Rocketbot debe ejecutarse de manera programada. Al abrir una sesión mediante RDP se posibilita la ejecución de los bots con normalidad.

Para facilitar la creación de este archivo .rdp Rocketbot creo la herramienta RDP Helper.

Antes de utilizar la herramienta:

Inicie sesión en el escritorio remoto con un usuario con privilegios administrativos.Abra una línea de comando y escriba control userpasswords2

Ventana de Símbolo del sistema con comando para abrir Cuentas de usuario

Abra la pestaña Avanzado y en Administración avanzada de usuarios haga clic en el botón Avanzado.

Ventana Cuentas de usuario

Ventana Cuentas de usuario – Pestaña Avanzado

Seleccione Usuarios, haga clic derecho en el panel central y seleccione Nuevo usuario.

Ventana Usuarios y grupos locales

Complete el formulario con el nombre de usuario y la contraseña y marque la opción La contraseña nunca caduca.

Ventana Nuevo Usuario

Cierre esa ventana y regrese a Cuentas de usuario, abra la pestaña Usuarios, seleccione el usuario creado y haga clic en el botón Propiedades.

Ventana Usuarios y grupos locales – Menú desplegable de usuario

En la ventana Propiedades de usuario, abra la pestaña Miembro de, haga clic en Agregar, luego haga clic en Avanzado.

Ventana Propiedades de <usuario>

Ventana Seleccionar Grupos

Haga clic en Buscar ahora y seleccione Usuario de escritorio remoto.

Ventana Seleccionar Grupos (Avanzado)

Finalmente aplique los cambios.

⚠️Importante:
El usuario creado no debe estar bajo las políticas del que tiene la instancia productiva Rocketbot.

Como configurar la herramienta:

  1. Conéctese a la cuenta y abra Rocketbot Studio (No es necesaria una licencia productiva, con una de desarrollador es suficiente).
  2. Abra el complemento Asistente de Escritorio remoto y complete el formulario con los datos necesarios para realizar una Conexión a Escritorio remoto sobre la cuenta que posee el Rocketbot productivo. Una vez completado con lo solicitado:

    • IP del ambiente
    • Usuario y Contraseña
    • Carpeta donde guardar el archivo a crear
    • Nombre del archivos .rdp que se creara
    • Modo (Opcional, por defecto será Pantalla Completa, pero puede seleccionarse modo Ventana)
    • Resolución con la cual abrir el escritorio remoto (800×600; 1024×768; 1920×1080; etc.).
      Nota: Debe ser la resolución con la cual se desarrollo el bot.

  3. Dar guardar para crear el archivo .rdp.
  4. Cree una tarea automatizada para ejecutar el archivo generado así se abrirá el escritorio remoto para ejecutar los bots en el horario programado sin intervención humana.
  5. Desconéctese de la cuenta creada para ejecutar el archivo .rdp usando TSCON.bat (Documentación)

💡Nota:
El usuario donde se ejecutara el archivo .rdp no necesita tener Rocketbot instalado, salvo el caso en que se desee crear el archivo mencionado allí.




RPA on Virtual Server

Depending on the process you wish to automate and how you intend to run the robots, your server will need to meet specific requirements for the robot to operate well.

Processes can be divided into two types: those that require a graphical interface (robots that take screenshots or use the keyboard and mouse) and those that do not (robots that emulate a terminal, automate xlsx files, use an API, etc.). It is critical to consider this when developing a robot because most servers lose the graphical interface when disconnected, causing robots to fail.

Screen locking and minimizing the remote desktop can also have an impact on your robot’s performance. The operating system should never lock the screen on a machine running an automated process (RPA), as the robot will be unable to take screenshots or move the mouse to the indicated places. When you minimize the rdp, Windows may pause some processes or remove the interface, so you must configure your machine to prevent this from happening.

In Rocketbot, we have developed an application that allows you to easily configure your server, creating the necessary.bat files to run your robot and/or modifying the registers to prevent screen problems. You can download this application here: RDP-Rocketbot. Remember to save it to the server and/or machine as needed.

Maintain interface when server disconnects.

To avoid these issues, Windows servers have a command called tscon.exe that allows you to take an open session on the server and move it to the console, giving your robot an interface to work with after disconnecting from the server.

The tscon command can be used to create a bat file in the RDP-Rocketbot application’s Disconnect and run a task or Disconnect and run ROC tabs. This file must be run as administrator each time you want to disconnect from the server (or run your robot, depending on the option selected), and it will disconnect you from the server while maintaining the graphical interface.

Beware! If the remote desktop is not opened from a physical screen, the resolution may change and become lower. Refer to section three for alternatives.

You can edit the bat and examine its contents, but we have summarized the crucial information here. The bat contains a powershell script that retrieves the session id of the session you are using when logging into the rdp and uses it in the tscon command to open the console session.

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console" 2> UnlockErrors.log

If you need the bat to run your robot after disconnecting, you will see something like this:

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console" 2> UnlockErrors.log

timeout 10
cd c:\rocketbot
rocketbot.exe -start=nombre_robot

Maintain interface when minimizing remote desktop

To minimize the remote desktop without interfering with the robot’s operation, modify the following registers in the machine that opens the rdp:

  • For the current user:
    • HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client (32 bit)
    • HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client (64 bit)
  • For all users:
    • HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client (32 bit)
    • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client (64 bit)

You can change the logs with a single click in the RDP-Rocketbot application’s Connect to Remote Desktop tab. Just keep in mind that you must run the application as an administrator.

Change in resolution after disconnecting from the server

If you have already resolved the previous issues, but your robot still fails and/or does not recognize the images, you most likely have a resolution issue. We already mentioned in the first section of this post that when you disconnect the server, the graphical interface is lost and you must use tscon. This enables the robot to take screenshots, but because the server no longer has access to your screen to set a resolution, it uses its own default resolution, which is 1024×768 in most cases.

If your robot uses virtualization, this resolution change may have an impact, so it is critical that you check the resolutions that your server allows when you disconnect before beginning to develop your robot.

The resolutions allowed by the server in the Screen resolutions table from the TSCON console can be seen in the View screen resolutions tab of the RDP-Rocketbot application.

Those are the resolutions you can use, but that does not mean you can begin building the robot. When you disconnect, you should check the resolution of the server and, if possible, change it to the resolution you require. You can use the Windows module to change the screen resolution, and you can also use the Take screenshot command in the Desktop section to see if the resolution is correct.

A sample robot can be downloaded here 👇

If when exiting the remote desktop it is not possible to change the resolution manually and/or using the Rocketbot module, you can try the following:

Change the resolution in regedit by searching for all registries named DefaultSettings XResolution and DefaultSettings YResolution.

Prevent screen lock

To prevent the server from blocking the screen, you should first consult with the IT team to see if it is possible to modify the necessary settings to prevent this from happening, as this may not be possible depending on the company’s security policies.

In the Settings section of the RDP-Rocketbot application, you can modify the registers needed to disable the screen lock. The registry to be modified is HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows

Changing Policies Link




RPA en Servidores Virtuales

Dependiendo del proceso que quieras automatizar y de como ejecutarás los robots, necesitarás que tu servidor cumpla con ciertas carácteristicas para que el robot funcione sin problemas

Podemos clasificar los procesos en dos categorías, los que necesitan interfaz gráfica (robots que sacan captura de la pantalla o utilizan el teclado y mouse) y los que no la necesitan (robots que emulan una terminal, automatizan archivos xlsx, utilizan una API, etc.). Es importante tener esto en cuenta a la hora de desarrollar un robot, ya que la mayoría de los servidores, al desconectarte, pierden la interfaz gráfica y esto provoca que los robot fallen.

El bloqueo de pantalla y el minimizar el escritorio remoto también pueden afectar el funcionamiento de tu robot. El sistema operativo nunca debe bloquear la pantalla en una máquina que ejecuta un proceso automatizado (RPA), ya que al igual que en el caso anterior, el robot no podrá sacar captura de pantalla o mover el mouse en los lugares indicados. Y en el caso de minimizar el rdp, windows puede pausar algunos procesos o quitar interfaz, por lo cual debes configurar tu máquina para que esto no ocurra.

En Rocketbot desarrollamos una aplicación que te permite configurar tu servidor de forma sencilla, creando los archivos .bat necesarios para ejecutar tu robot y/o modificando los registros para prevenir problemas con la pantalla. Esta aplicación la puedes descargar aquí: RDP-Rocketbot. Recuerda descargarlo en el servidor y/o en tu máquina según corresponda.

Mantener interfaz al desconectarse del servidor

Para evitar estos problemas, los servidores windows cuentan con un comando llamado tscon.exe que permite tomar la sesión que tienes abierta en el servidor y moverla a la consola, de esta manera tu robot tendrá una interfaz donde trabajar luego de desconectarte del servidor.

En las pestañas Desconectarme y ejecutar una tarea o Desconectarme y ejecutar ROC de la aplicación RDP-Rocketbot puedes crear un archivo bat con el comando tscon. Este archivo debes ejecutarlo como administrador cada vez que quieras desconectarte del servidor (o ejecutar tu robot, según la opción elegida) y te desconectará del servidor y mantendrá la interfaz gráfica.

Video explicativo de como configurar el servidor para ejecuciones desatendidas

Cuidado! Al no abrir el escritorio remoto desde una pantalla física, la resolución puede cambiar y ser menor. Revisa la sección tres para ver como trabajar con esto.

El bat puedes editarlo y revisar que es lo que contiene, pero resumimos lo importante acá. El bat tiene un script de powershell que obtiene el id de la sesión que estas usando al entrar al rdp y la utiliza en el comando tscon para que este la abra en la sesión de la consola.

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console" 2> UnlockErrors.log

Si necesitas que el bat ejecute tu robot al desconectarte, verás algo así

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$sessionid=((quser $env:USERNAME | select -Skip 1) -split '\s+')[2]; tscon $sessionid /dest:console" 2> UnlockErrors.log

timeout 10
cd c:\rocketbot
rocketbot.exe -start=nombre_robot

Mantener la interfaz al minimizar el escritorio remoto

Para poder minimizar el escritorio remoto y no afectar el funcionamiento del robot, debes modificar algunos registros en la máquina que abre el rdp, estos registros son:

  • Para el usuario actual:

    • HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client (32 bit)
    • HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client (64 bit)

  • Para todos los usuarios:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client (32 bit)
    • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client (64 bit)

En la pestaña Conectarme a Escritorio Remoto de la aplicación RDP-Rocketbot, puedes cambiar los registros con un solo botón. Solo recuerda ejecutar la aplicación como administrador.

Cambio de resolución al desconectarte del servidor

Si ya solucionaste los problemas anteriores, pero tu robot falla y/o aún no reconoce las imagenes, es probable que tengas un problema con la resolución. Ya mencionamos en la primera parte de este post que al desconectarte el servidor pierde la interfaz gráfica y es necesario utilizar tscon. Esto permite que el robot pueda sacar capturas, pero como el servidor ya no cuenta con tu pantalla para ajustar una resolución, toma sus propias resoluciones por defecto, que en la mayoría de los casos es de 1024×768.

Si tu robot trabaja con virtualización, este cambio de resolución puede afectarlo, por lo cual es importante que, antes de comenzar a desarrollar tu robot, revises las resoluciones que permite tu servidor al desconectarte.

En la pestaña Ver las resoluciones de pantalla de la aplicación RDP-Rocektbot, puedes ver las resoluciones que permite el servidor en la tabla Resolucoones de pantalla desde la consola de TSCON.

Esas resoluciones son las resoluciones que puedes utilizar, pero no quiere decir que puedes comenzar a construir el robot. Debes revisar la resolución que tiene el servidor al desconectarte y si es posible cambia a la resolución que necesitas. Para cambiar la resolución de pantalla, puedes utilizar el módulo Windows y también puedes utilizar el comando Sacar captura de pantalla de la sección Desktop para válidar si la resolución es la correcta o no.

Ésto lo puedes realizar con RDP-Helper, acá encontrarás los pasos necesarios 👉 Pasos Resolución

Si al salir de un escritorio remoto no es posible modificar la resolución de forma manual y/o usando el módulo de Rocketbot, puedes modificar realizar la siguiente modificación:

Buscar en el regedit todos los registros que se llamen DefaultSettings_XResolution y DefaultSettings_YResolution y cambiar la resolución a la que necesitas

Prevenir el bloqueo de pantalla

Para evitar que el servidor bloquee la pantalla debes, en primer lugar, consultar con el equipo de TI si es posible modificar las configuraciones necesarias para que esto no ocurra, ya que dependiendo de las politicas de seguridad de la empresa, podría no ser posible modificar esta configuración.

En la sección Configuraciones de la aplicación RDP-Rocketbot, puedes modificar los registros necesarios para deshabilitar el bloqueo de pantalla. El registro que se modificará es HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows

Cambiando Policies Link

For Windows 7/Windows 10/Windows Server 2012 and above:

  • Press Windows+R and type gpedit.msc
  • Navigate the tree view on the left to Computer Configuration/Administrative Templates/Windows Components/Remote Desktop Services/Remote Desktop Session Host/Session Time Limits
  • Adjust the four settings as desired (I believe you want to adjust Set time limit for disconnected sessions and Terminate session when time limits are reached)