Estou tentando executar um arquivo .bat ou .cmd em um pc remoto com isto:
PSEXEC \\192.0.0.230 "\Users\James\Desktop\BatchFiles\StopStart.cmd"
Isso irá desabilitar uma NIC e habilitar outra NIC, o problema é que ela ignora o tempo limite /t 10, porque em vez de abrir o arquivo no computador remoto, ele executa os comandos escritos no arquivo em lotes. Portanto, se ele desabilitar a primeira NIC, perderá a conexão, o que significa que não poderá habilitar a outra NIC. Mas se ele pode apenas executar o arquivo e deixar as linhas serem executadas no PC remoto, isso não é um problema, porque mesmo se eu perder a conexão devido à NIC estar desabilitada, ele deve continuar executando o arquivo .bat no PC remoto em vez de executar os comandos escritos nele do meu próprio PC.
Isso é possível? Obrigado.
Você pode ser capaz de usar
schtasks
. Eu não tentei isso, mas algo assim pode funcionar:Você pode dar uma olhada na referência da Microsoft para comandos schtasks para obter mais detalhes.
Talvez você possa usar um segundo script curto (que você inicia com psexec) para que a máquina remota copie esse arquivo em lote localmente e, na última linha, use
call
para iniciar essa segunda cópia do arquivo em lote local (por exemplo, copiado para%temp%
)?Ele perderá a conexão com o local da rede, mas como "chamada" estava na última linha, isso não importa mais.
Se você tiver acesso ao Powershell em ambas as máquinas, poderá usar Invoke-Command ou Invoke-CommandAs para executar o comando
Isso pode ser mais poderoso do que uma execução .bat regular, mas com base na experiência anterior, seria como em ambientes de automação nossas instâncias do Jenkins executam comandos remotamente em nós da máquina do servidor host Jenkins.
No Powershell, há uma opção Invoke-Command, que desde a última vez que a examinei, parece ter adicionado parâmetros adicionais para executar efetivamente como outro usuário nessa máquina remota (estou mais familiarizado com o componente de instalação adicional Invoke-CommandAs, então Eu não sou 100% desta solução particular.). Dito isso, com base na documentação de lá, segue um exemplo que estou copiando aqui caso o link morra, e para referência rápida.
Se, no entanto, você espera usar a abordagem Invoke-CommandAs, isso funciona pelo menos a partir da versão 3.0 do Powershell, pelo que entendi.
Isso então ficaria assim:
Invoke-CommandAs -ComputerName '<ComputerName**>' -Credential $Credential -ScriptBlock { Get-Process }
Ou:
Invoke-CommandAs -ComputerName '<ComputerName**>' -AsUser $Credential -ScriptBlock { <Path_To_Script*> }
*
ou seja, "c:\scripts\test.ps1" em seu exemplo, ou no seu caso, "\Users\Bridge\Desktop\BatchFiles\StopStart.cmd" - apenas certifique-se de remover os colchetes nos exemplos de código acima.**
Nome NETBIOS, endereço IP ou nome de domínio totalmente qualificado de um ou mais computadores em uma lista separada por vírgulas. Se estiver usando um endereço IP, você também deve fornecer um parâmetro Credential, como, por exemplo,-Credential Domain01\User01
Abra a Conexão de Área de Trabalho Remota e faça login no sistema a partir daí.
Você poderá então executar qualquer programa que usar.
Quase consegui executar programas GUI no WSL 2.0 no Windows 10 Pro usando o acima.
Se isso não funcionar, por favor, informe como tal.