Desconecte um perfil do OpenVPN GUI, não todos os túneis
Um túnel gerido pela GUI precisa de um comando da GUI; um túnel gerido por um serviço precisa do controlo do serviço. Identifique que programa é dono do perfil antes de escrever qualquer script.
Um script de desconexão costuma falhar por um motivo: dirige-se ao proprietário errado. Um túnel gerido pela GUI comunitária do OpenVPN pertence à sessão dessa GUI, um túnel iniciado por um serviço do Windows pertence ao serviço, e o OpenVPN Connect não pertence a nenhum dos dois. Percorra estas verificações por ordem e pare quando o proprietário não for claro. Enviar um comando kill porque o proprietário era ambíguo é exatamente como a desconexão de um perfil se transforma numa queda de todo o sítio.
Para uma ligação gerida pela GUI, o comando útil é uma mensagem à GUI, não um sinal ao openvpn.exe.
Primeiro, identifique o proprietário
Veja que programa mostra realmente o estado ligado antes de escrever seja o que for. Um ícone na área de notificação significa que a sessão da GUI é dona dele. Uma entrada de serviço significa que é o serviço. Uma janela de aplicação separada com a sua própria lista de perfis não significa nenhum dos dois, e aplica-se a sua própria interface específica da versão.
Verifique também a conta e a sessão de ambiente de trabalho. Uma tarefa agendada que corre como outro utilizador, ou numa sessão não interativa, não deve ser assumida como controladora da GUI que uma pessoa com sessão iniciada vê. Essa divergência produz um comando que termina de forma limpa e não muda nada, e é o tipo de falha mais caro de diagnosticar a partir de um registo.
Depois envie a desconexão do próprio proprietário
Com a GUI instalada no caminho do exemplo e um perfil chamado office, o comando completo é uma linha:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect officeSubstitua pelo seu caminho de instalação real e pelo nome exato da configuração, incluindo maiúsculas e minúsculas como a GUI as mostra. A documentação de comandos do projeto lista os controlos de GUI suportados, e este exemplo pertence apenas ao OpenVPN GUI — não é um comando para todas as aplicações com OpenVPN no nome.
Para um túnel pertencente a um serviço, o controlo correto é o serviço, não o binário da GUI. Inspecione o serviço instalado e os perfis que gere antes de parar alguma coisa, porque uma paragem pode derrubar vários túneis de uma vez e não obterá um resultado por perfil.
Verifique que não cai mais nada
A GUI também documenta um comando disconnect_all, e o seu âmbito é precisamente a razão pela qual é a ferramenta errada para um script que só deve parar office. Se a tentação de o usar por simplicidade aparecer, pergunte o que mais está ligado naquela máquina e como o utilizador vai notar.
taskkill /F /IM openvpn.exe é pior de duas formas. Seleciona processos pelo nome do executável e força a terminação, pelo que não expressa nem um nome de perfil nem a sequência normal de desconexão do proprietário. Chamar a isso um encerramento ordeiro esconde ambos os problemas atrás de um único estado de saída.
Qualquer que seja o caminho escolhido, verifique o alcance do impacto antes da alteração: liste os perfis ligados, anote quais devem sobreviver e verifique-os novamente depois.
Confirme o estado, não o código de saída
Depois de pedir a desconexão, leia o estado da ligação indicada através do seu proprietário em vez de confiar no valor de retorno do comando. Se o passo seguinte precisar da rede após o desmonte, espere por essa mudança de estado com um tempo limite explícito em vez de assumir que a limpeza terminou quando o processo regressou. Um script que corre contra o desmonte falhará de forma intermitente e a culpa recairá sobre a VPN.
Se o estado nunca mudar, o proprietário provavelmente não é aquele a quem se dirigiu. Verifique novamente a sessão e a conta antes de escalar para um comando mais forte.
O que colocar no registo
Registe o nome do perfil, o proprietário a quem se dirigiu e o contexto de arranque, além do estado resultante. Não despeje a configuração completa nem as credenciais no registo da tarefa, e não registe a linha de comando se contiver um caminho para um ficheiro com segredos.
Uma mensagem de erro que nomeie o perfil e o contexto basta para a pessoa seguinte reproduzir o problema. Um registo que anota apenas um código de saída genérico devolve-as ao início, e é aí que os palpites recomeçam.