Abra uma sessão não-console quando o Windows inicializar

1

Eu sei como abrir automaticamente uma sessão de console quando um host do Windows é inicializado (a maneira recomendada é usar uma senha criptografada: link ).
Isso é útil quando um servidor executa um programa mal escrito que precisa de uma GUI para ser executada, enquanto deve ser executado como serviços, ou pelo menos em segundo plano.

Quando a sessão estiver aberta, a tela poderá ser bloqueada e o programa continuará funcionando. Um administrador pode até mesmo RDP com outra sessão (isso também bloqueia a sessão do console). Até agora não vi exceção a isso.

Este método leva a vários problemas. Alguns dos maiores:

  • uma sessão está aberta no console. Qualquer pessoa na frente do servidor tem acesso total a esta sessão, ou qualquer coisa que acerte o teclado / mouse não monitorado pode levar ao desaster. Podemos atenuar isso com um tempo limite de tela curto
  • apenas uma sessão pode ser aberta dessa maneira. Então, quando precisamos de dois programas diferentes e não coabitantes, estamos ferrados

Eu gostaria de abrir várias sessões não console automaticamente quando o servidor é inicializado. Como se várias sessões de área de trabalho remota fossem abertas e desconectadas. Os programas incriminados podem ser executados com uma GUI em sessões separadas.
- > alguma ideia de como conseguir isso?

    
por Gregory MOUSSAT 17.08.2017 / 03:14

2 respostas

2

mstsc.exe pode ser executado sem GUI, o que geralmente é inútil, mas muito útil nesse caso.
Você pode criar uma tarefa agendada disparada quando o computador é iniciado.
Essa tarefa iniciará quantas sessões da área de trabalho remota você desejar e as eliminará, deixando as sessões ativas e desconectadas.

Eu pessoalmente uso um lote (.cmd) chamado pela tarefa agendada:

start c:\windows\system32\mstsc.exe "c:\path\do_it.rdp"
timeout /nobreak /t 60
taskkill /f /im mstsc.exe

Eu tenho uma maneira mais sofisticada de matar o mstsc.exe, que é específico para as minhas necessidades, então eu coloquei um taskkill básico para o exemplo.

    
por 23.08.2017 / 02:46
1

Para obter exatamente o que você pediu, você precisará de pelo menos um Linux com GUI ou Windows Server para colocar um script.

No linux / bash eu escrevi um monitoramento de ping script que executa um comando após o que provavelmente seria uma reinicialização do servidor (ping por um tempo). O comando seria um script executando duas vezes um cliente rdp em segundo plano com certificados pré-aceitos e credenciais armazenadas válidas (uma para cada conexão) para o objeto de servidor de sua pergunta. Eu terminaria o script com um

sleep 60 && killall -9 rdpclientname

(como matar o cliente de rdp não terminará as sessões remotas que é parte do que você quer conseguir).

Tenho certeza de que você pode fazer isso com facilidade em um Lote do Windows em vez de bash se você quiser usar o Windows como cliente. Só não tenho certeza se você pode estabelecer várias conexões do mesmo cliente Windows para o mesmo servidor Windows. No mínimo, você terá que usar dois usuários diferentes executando o script duas vezes, eu acho. Se você não puder, terá que colocar esses scripts em duas máquinas diferentes de clientes Windows.

Se você optar por ir em um cliente Windows, o binário chamado pelo seu segundo script ativado pelo script de monitoramento ping será mstsc.exe e terá o caminho completo para a sessão salva pelo rdp-for-your-server .rdp, contendo certificados pré-aceitos e credenciais válidas.

No cliente Windows, você pode usar o srv2any para executar o mstsc e os scripts apenas iniciam e param os dois serviços. No win você usará o scheduler de tarefas, no Linux, crontab.

Para que isso funcione como você deseja, você terá que desabilitar o login automático no servidor Windows. Você pode então conseguir um login local atrasado seguindo this .

Esta solução tem, é claro, uma porcentagem de falhas em que o tempo de inatividade observado pelo script de monitoramento de ping não será devido a uma reinicialização do servidor. Mas os dois logins indesejados automatizados não vão doer muito nesse caso.

Você terá que trabalhar e testar bastante para conseguir isso. É por isso que o seguinte ... Eu tentaria qualquer outra coisa possível antes de construir tal arranjo!

Em qualquer caso, como sugeri no meu comentário à sua pergunta, eu tentaria apenas iniciar o programa mal codificado através de srv2any no servidor. Você não mencionou essa tentativa na sua pergunta. Você já tentou isso?

    
por 20.08.2017 / 18:20