O que fazer quando o script de startup retorna Session not found?

O que fazer quando o script de startup retorna Session not found?

O script que deveria desconectar a sessão do usuário e redirecioná-la para o console falha com a mensagem Session not found, e a sessão continua como estava. A causa costuma ser um nome de usuário com espaços, e a correção é uma troca de uma linha no script. Veja abaixo por que isso acontece e como resolver.

1. Por que o script retorna Session not found?

O erro aparece quando o nome do usuário do Windows tem espaços, como USER NAME.

O script console_session.bat, que fica na pasta scripts do BotCity Studio SDK, localiza a sessão ativa pelo nome do usuário com o comando query session, que lista as sessões abertas no Windows. Em seguida, o comando tscon transfere essa sessão para o console, ou seja, mantém a tela da máquina ativa mesmo depois que a conexão remota é fechada:

FOR /F "skip=1 tokens=3 usebackq" %%X in (`query session %USERNAME%`) DO tscon %%X /dest:console
powershell.exe -Command Set-DisplayResolution -Width 1600 -Height 900 -Force

Com um nome composto, o espaço quebra a consulta do query session, e não sobra nenhum ID de sessão para o tscon redirecionar.

2. Como corrigir o console_session.bat?

Troque %USERNAME% pelo coringa %User*Name% na primeira linha do script e mantenha o restante como está. Um coringa é um padrão que aceita qualquer sequência de caracteres no lugar do asterisco.

FOR /F "skip=1 tokens=3 usebackq" %%X in (`query session %User*Name%`) DO tscon %%X /dest:console
powershell.exe -Command Set-DisplayResolution -Width 1600 -Height 900 -Force

O coringa localiza a sessão mesmo quando o nome tem espaços ou outros caracteres especiais. O trecho skip=1 tokens=3 continua extraindo o ID da sessão, e o tscon a redireciona para o console.

3. O startup.bat também retorna Session not found?

Não na versão original. O startup.bat, que fica na pasta startup do SDK, faz o mesmo redirecionamento por PowerShell:

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

Nesse script, o tscon usa a variável %sessionname%, e não o resultado do comando quser, que lista os usuários conectados. Por isso, um nome de usuário com espaços não impede o redirecionamento. A consulta do quser alimenta apenas a variável $sessionid, que o script não chega a utilizar.

Se você adaptou o startup.bat para usar o $sessionid

Um nome de usuário composto ocupa duas colunas na saída do quser e desloca as posições do -split. Nesse caso, o índice [2] deixa de apontar para o ID da sessão e precisa ser ajustado conforme a saída do comando na sua máquina.

4. Onde encontro os scripts originais?

Veja o conteúdo original dos scripts e como indicá-los na configuração do Runner nas seções Script de desconexão de sessão e Script de configuração do ambiente.

Ainda precisa de ajuda?

Se isso não resolver o seu caso ou sua pergunta não está listada aqui, abra um chamado com o time de suporte.