executar comandos localmente nos computadores remotos é uma tarefa comum que muitos administradores de TI têm de fazer todos os dias. Aqui está como você pode fazer isso em PowerShell.
às vezes não é suficiente usar DCOM, RPC e outros protocolos remotos para executar tarefas em computadores remotos. Para executar comandos no computador remoto requer uma abordagem diferente. Um administrador deve criar uma sessão de algum tipo e enviar comandos através da rede que são então consumidos pelo computador remoto.,
Uma vez que este é um artigo sobre PowerShell e não sobre telnet (você não está usando telnet, está?), nós vamos ficar com uma tecnologia chamada PowerShell Remoting. PowerShell Remoting é uma característica do PowerShell que foi introduzido no Windows PowerShell V2. Ele permite aos usuários abrir, gerenciar e fechar sessões em computadores remotos e interagir com eles como se estivessem sentados no console local.,
Para estabelecer uma sessão chamada uma PSSession com o PowerShell requer que o computador remoto tem PowerShell Remoting habilitado e escutando na porta 5985 (HTTP) ou 5986 (HTTPS), com todos os habituais de exceções do firewall. Dependendo de como o usuário quer estabelecer a conexão, alguma configuração do cliente também pode ser necessária. Existem muitas configurações diferentes em que um usuário pode encontrar-se, mas para este artigo, vamos assumir que os computadores locais e remotos estão ambos no mesmo domínio de Diretório Ativo., Neste contexto, PowerShell Remoting usará Kerberos para autenticar, e não precisaremos passar credenciais alternativas para os comandos.
assumindo que o computador remoto tem a remoção PowerShell activa, vamos primeiro tentar executar comandos simples num computador remoto. Como um teste para garantir que o código está sendo executado no computador remoto, eu sempre gosto de usar o comando hostname que retorna o nome do computador.
Existem duas formas de executar comandos remotos através de PowerShell Remoting; podemos emitir comandos interactivamente ou não interactivamente., Interactivamente significa que teremos de estar no nosso computador para executar os comandos fisicamente. Vamos começar por mostrar um exemplo não interativo.
para executar comandos remotos não-interactivamente, usamos o comando de Invocação-comando. Este comando tem um parâmetro ComputerName que nos permite especificar um computador para executar no comando. Também temos um parâmetro ScriptBlock onde vamos encapsular os comandos que pretendemos Executar no computador remoto. Você pode ver abaixo como isso funciona em ação. Estou a executar o comando hostname localmente no meu computador e a executá-lo remotamente com o comando Invocação., Você pode ver que ele retorna resultados diferentes.
PS C:\> hostname
MACWINVM
PS C:\> Invoke-Command -ComputerName SRV1 -ScriptBlock {hostname}
SRV1
agora executou o seu primeiro comando remoto! Qualquer coisa pode ir para o parâmetro ScriptBlock. Abaixo, estou criando uma declaração de se / então dentro do scriptblock $como um teste para garantir que o código está executando remotamente.
pode não ter reparado, mas o comando Invoke-Command criou uma sessão leve em segundo plano para executar esse comando e, quando o comando estava completo, destruiu-o. Isto é mais óbvio quando você optar por executar comandos interactivamente usando o comando Enter-Psssession.,
O comando Enter-Psssession permite-lhe aceder a uma sessão remota, executar comandos, obter resultados e funcionar como se estivesse a escrever comandos na consola local. Para fazer isso, porém, primeiro, você precisa estabelecer uma sessão. Uma maneira de fazer isso é usar o parâmetro ComputerName. Observe abaixo que eu entrei em uma sessão remota e tenho uma nova linha de comandos PowerShell que é pré-editada pelo nome do computador em que a sessão está rodando.
PS C:\> Enter-PSSession -ComputerName SRV1
: PS C:\>
neste ponto, posso executar todos os comandos que quiser, e eles serão executados no computador remoto., Não precisamos de usar o comando de Invocação para fazer isto. Nós simplesmente executamos os comandos como eles são. Quando terminarmos, temos de fechar a sessão. Para isso, usamos a palavra-chave de saída que nos desconecta da sessão e a fecha.
Você pode ver abaixo uma vez que digitar saída e carregar Enter, nós somos imediatamente trazidos de volta para a nossa consola local.
: PS C:\>exit
PS C:\>
PowerShell Remoting é uma maneira conveniente de executar comandos em computadores remotos., Enquanto o computador remoto estiver configurado para a PowerShell Remoting, que é uma configuração única, há uma configuração mínima, se alguma, necessária no computador cliente para que isso funcione. Especialmente, se em um ambiente de diretório ativo, o processo é sem costura e uma ótima maneira de evitar ter que sneakernet em todo o escritório apenas para executar scripts e comandos em todos os seus computadores!