Estou ansioso para executar comandos especiais em uma máquina de destino em minha rede local (grupo de trabalho, sem ingresso no domínio).
As máquinas foram previamente configuradas com Enable-PSremoting
etc. para tolerar o gerenciamento remoto do Windows para que possamos executar um comando na máquina alvo da seguinte forma.
Os comandos funcionam bem, exceto que se eu quiser iniciar alguns comandos especiais como start-process, eles não serão executados como a máquina local.
Por exemplo, se eu executar na minha máquina local:
> Start-Process -Filepath "cmd.exe"
ele inicia o processo cmd. Se eu fizer isso remotamente, assim
Invoke-Command -Computername "my-target-ip" -ScriptBlock {Start-Process -Filepath "cmd.exe"} -Credential get-credential
A janela cmd não é executada na máquina de destino.
Isso me permitiria instalar alguns pacotes especiais em minhas máquinas de destino que exigem algumas configurações de GUI do autoit e que não podem ser feitas apenas via PowerShell, como pausar atualizações e configurar aplicativos de navegador padrão por meio da GUI. Caso contrário, algumas configurações normais funcionam bem (configurações de firewall, gravação de arquivos, ativação de configurações de rede, etc.)
Muito obrigado.
Responder1
Invoke-Command
destina-se a comandos não interativos. IIRC você não receberá um prompt interativo ao usá-lo e, claro, se quiser iniciar um programa no computador remoto, ele deverá existir lá antes de iniciá-lo.
Se você quiser usar uma sessão interativa no computador remoto, você deve usarEnter-PSSession
em vez de:
Enter-PSSession -Computer "remote" -Credential (Get-Credential)
Dentro desta sessão, você poderá iniciar um prompt do cmd se realmente precisar dele.
Se você precisar executar vários comandos relacionados que não são interativos, o New-PSSession
cmdlet pode ser interessante, junto com o Invoke-Command -Session $session
.