No podía conectarse la sesión ID 1 a consola de nombre de sesión, Código de error 7045

He creado una máquina de agente auto hospedado en un modo interactivo (Windows 10) para realizar las pruebas de la unidad. Para desconectar de las conexiones de escritorio remoto mientras se ejecutan pruebas automatizadas Estoy ejecutando el siguiente comando de una tarea de línea de comandos (desde Azure DevOps). Esto está funcionando bien cuando el usuario se registró en la máquina de agente. Pero conseguir un error Si no hay ningún usuario conectado a esa máquina de agente.

¿Es este comportamiento esperado? ¿Podemos pasar esto?

%windir%\System32\tscon.exe 1 /dest:console

Error:

Could not connect sessionID 1 to sessionname console, Error code 7045
Error [7045]: The requested session access is denied.

Intenté con las otras opciones, así como crear un archivo por lotes con el siguiente código y ejecutarlo mientras se ejecuta el oleoducto.

Este también está dando el mismo error

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
  %windir%\System32\tscon.exe %%s /dest:console
)

Pregunta hecha hace 3 años, 4 meses, 27 días - Por techtrailblazer


4 Respuestas:

  • Comando query user %USERNAME% devolverá la sesión incluso si el usuario no está conectado.

    Puedes ejecutar el comando query user ^| find "Active" para consultar a los usuarios de inicio de sesión activos solamente.

    See below:

    for /f "tokens=3" %%s in ('query user ^| find "Active" ') do (
      %windir%\System32\tscon.exe %%s /dest:console 
    )
    

    Respondida el Dec 18, 2020 a las 17:28 - por algorithmwizard

    Votos positivos: 0 | Votos negativos: 0

  • Crear un bat archivo con el código:

    (for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
      %windir%\System32\tscon.exe %%s /dest:console
    )) 
    

    que cerrará la sesión RDP y creará una sesión con la consola como Activo. Puedes comprobar ejecutando el comando qwinsta. Lets name that file KeepSessionAlive.bat.

    Ahora, cree un script PowerShell con el siguiente código donde comprobaremos si la sesión de consola es activa o no. Si no es activo, entonces ejecutaremos lo anterior bat archivo, de lo contrario no lo haremos.

    $val = qwinsta
    $flag = $True
    for ($i = 0; $i -lt $val.Count; $i++) {
        if ($val[$i] -Match 'console'){
            if ($val[$i] -Match 'Active'){
                Write-Output $val[$i]
                $flag = $False
            }
        }
    }
    if ($flag){
        Write-Host "Activating Session"
        'Execute Bat file create above'
    }
    

    Podemos llamar al script anterior PowerShell en un oleoducto y ejecutar nuestro oleoducto de forma independiente. Cada vez, comprobará el estado de la sesión de la consola y, sobre la base de eso, ejecutará la bat archivo (que se desconectará de las conexiones de escritorio remoto).

    Respondida el Dec 18, 2020 a las 17:36 - por pixelpilot

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando indica que la solicitud de acceso a la sesión específica se encuentra denegada. Esto puede ser debido a que el agente se ejecuta en un contexto que no tiene los permisos necesarios para interactuar con la sesión de consola.

    Una posible solución sería ejecutar el agente de Azure DevOps con una cuenta de usuario que tenga los permisos necesarios para interactuar con la sesión de consola. De esta forma, el agente tendrá los permisos adecuados para ejecutar el comando de tscon.exe y conectar la sesión correctamente.

    Si no es posible cambiar la cuenta de usuario con la que se ejecuta el agente, podrías intentar ejecutar el comando de tscon.exe con privilegios elevados utilizando el comando "runas". Por ejemplo:

    bash
    runas /user:nombre_de_usuario "%windir%\System32\tscon.exe 1 /dest:console"
    

    Recuerda reemplazar "nombredeusuario" con el nombre de usuario que posea los permisos necesarios para interactuar con la sesión de consola.

    Es importante tener en cuenta que el acceso a la sesión de consola desde una sesión remota puede ser bloqueado por motivos de seguridad en Windows. Por lo tanto, es recomendable revisar la configuración de seguridad y los permisos de la máquina para asegurar que el agente de Azure DevOps pueda conectarse a la sesión de consola de forma segura.

    Respondida el Dec 19, 2020 a las 17:31 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Sí, este es un comportamiento esperado. No puedes conectarte a una consola de sesión si no hay ningún usuario conectado a la máquina.

    Para resolver este problema, puedes utilizar una tarea de Azure DevOps "Iniciar sesión de escritorio remoto" para iniciar sesión en la máquina de agente antes de ejecutar la tarea de línea de comandos.

    Aquí tienes los pasos:

    • Agrega una tarea "Iniciar sesión de escritorio remoto" a tu canalización.
    • Configura los siguientes campos:
    - Nombre de la máquina remota: El nombre de la máquina de agente.
    • Nombre de usuario: El nombre de usuario para iniciar sesión en la máquina.
    • Contraseña: La contraseña para iniciar sesión en la máquina.
    • Agrega una tarea de "Línea de comandos" después de la tarea "Iniciar sesión de escritorio remoto".
    • En la tarea de "Línea de comandos", ejecuta el comando `%windir%\System32\tscon.exe 1 /dest:console`.

    Este enfoque garantizará que haya un usuario conectado a la máquina de agente antes de intentar conectarse a la consola de sesión.

    Respondida el Dec 19, 2020 a las 17:31 - por Gemini

    Votos positivos: 0 | Votos negativos: 0