Eu sei como abrir automaticamente uma sessão de console quando um host do Windows é inicializado (a maneira recomendada é usar uma senha criptografada: https://docs.microsoft.com/en-us/sysinternals/downloads/autologon ).
Isso é útil quando um servidor executa um programa mal escrito que precisa de uma GUI para ser executado, enquanto deve ser executado como serviços, ou pelo menos em segundo plano.
Uma vez que a sessão é aberta, a tela pode ser bloqueada e o programa continua a funcionar. Um administrador pode até mesmo RDP com outra sessão (isso também bloqueia a sessão do console). Até agora não vi nenhuma 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 desastre. Podemos mitigar isso com um tempo limite de tela curto
- apenas uma sessão pode ser aberta desta forma. Então, quando precisamos disso para 2 programas diferentes e não coabitantes, estamos ferrados
Eu gostaria de abrir várias sessões sem console automaticamente quando o servidor inicializar. 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 idéia de como conseguir isso?
mstsc.exe
pode ser executado sem GUI, o que geralmente é inútil, mas muito útil neste caso.Você pode criar uma tarefa agendada acionada quando o computador for iniciado.
Essa tarefa iniciará quantas sessões de área de trabalho remota você desejar e, em seguida, as eliminará, deixando as sessões vivas e desconectadas.
Eu pessoalmente uso um lote (.cmd) chamado pela tarefa agendada:
Eu tenho uma maneira mais sofisticada de matar o mstsc.exe que é específico para minhas necessidades, então eu apenas coloquei um taskkill básico para o exemplo.
Para alcançar 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 criaria um script de monitoramento de ping que executa um comando após o que provavelmente seria uma reinicialização do servidor (ping abaixo 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 do servidor de sua pergunta. Eu então terminaria o script com um
(como matar o cliente rdp não encerrará as sessões remotas, o que faz parte do que você deseja alcançar).
Tenho certeza de que você pode fazer isso facilmente em um lote do Windows em vez de bash se 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 clientes Windows diferentes.
Se você optar por ir em um cliente Windows, o binário chamado pelo seu segundo script ativado pelo script de monitoramento de ping será mstsc.exe e terá o caminho completo para rdp-for-your-server-saved-session.rdp, contendo certificados pré-aceitos e credenciais válidas.
No cliente Windows, você pode usar srv2any para executar o mstsc e os scripts apenas iniciariam e interromperiam os dois serviços. Na vitória, você usará o agendador 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 obter um login local atrasado após isso .
Esta solução tem, obviamente, 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 prejudicarão muito neste caso.
Você terá que trabalhar e testar muito para conseguir isso. É por isso que o seguinte... Eu tentaria qualquer outra coisa possível antes de construir tal arranjo!
De qualquer forma, como sugeri no meu comentário à sua pergunta, tentaria apenas iniciar o programa mal codificado por meio de srv2any no servidor. Você não mencionou essa tentativa em sua pergunta. Tentaste?