fbpx

Conexão remota com PowerShell 7.x

Conexão remota com PowerShell 7.x

Saudações, comunidade! Vamos para mais um tutorial do nosso amado PowerShell, uma das ferramentas multiplataforma mais poderosas dos últimos tempos.

Gerenciar o computador local com o PowerShell é prático, rápido, dinâmico e muito eficiente, certo? Já pensou se você pudesse realizar todas as tarefas de automação em um computador remoto?

Pois é! A resposta é sim, você pode! Como? Usando o serviço WinRM – Windows Remote Management!

De acordo com a Microsoft o WinRM é “um componente dos recursos de Gerenciamento de Hardware do Windows capaz de gerenciar o hardware do servidor local e remotamente. Esses recursos incluem um serviço que implementa o protocolo WS-Management, diagnóstico e controle de hardware por meio de controladores de gerenciamento de placa de base (BMCs) e uma API COM e objetos de script que permitem escrever aplicativos que se comunicam remotamente por meio do protocolo WS-Management” (Fonte aqui!)

Ou seja, o serviço WinRM oferece todos os recursos necessários para que você se conecte remotamente a um computador em uma rede comum.

Baixando e instalando o PowerShell

A seguir irei listar os passos necessários para que você faça a conexão remota. Não é necessário ser expert no PowerShell, mas é importante que você conheça o básico dessa ferramenta.

Neste tutorial vamos usar a versão 7.1.3. Para acessar a página com todos os releases do PowerShell, clique aqui. Para baixar a versão 7.1.3, pacote MSI instalativo, clique aqui.

ATENÇÃO! Note que é necessário instalar o PowerShell em todos os computadores, local e remoto.

Passo 1 – Alterar o perfil da rede

A primeira coisa a ser feita é alterara o perfil da sua rede. Sim, é recomendável que você esteja em uma rede privada (ou particular), por questões de segurança.

Clique em INICIAR / CONFIGURAÇÕES / REDE E INTERNET / PROPRIEDADES – e mude o perfil da sua rede para PRIVADA.

Alterando o perfil da rede.

Passo 2 – Habilitar o PSRemoting

A segunda coisa é habilitar o PowerShell Remoto no computador ao qual você deseja se conectar.

Durante a instalação, é mostrado uma opção para habilitar o PSRemoting. Caso não tenha feito isso durante o processo de instalação, basta digitar o seguinte comando:

Enable-PSRemoting -Force

Atenção! Como os comandos de conexão remota envolvem privilégios de Administrador, execute o PowerShell como Administrador.

Passo 3 – Adicionar os trusted hosts (hosts confiáveis)

Uma vez que o PowerShell Remoting esteja OK, é necessário fazer com que os computadores reconheçam um ao outro como Trusted Host, ou seja, host confiável. Assim, é necessário ir em ambos os computadores e executar os seguinte comando:

No PC Local: Set-Item WSMan:\localhost\Client\TrustedHosts -Value "NOME-PC-REMOTO"

No PC Remoto: Set-Item WSMan:\localhost\Client\TrustedHosts -Value "NOME-PC-LOCAL"

Para obter uma lista dos hosts confiáveis, use o comando:

Get-Item WSMan:\localhost\Client\TrustedHosts

Verificando os trusted hosts.

No PC local, aquele que você irá usar como Quartel General de conexões, você poderá adicionar vários computadores como trusted hosts. Para isso é necessário usar os seguintes comandos:

#recupera os trusted hosts atuais
$value = (Get-Item wsman:\localhost\Client\TrustedHosts).value
#seta o novo trusted hosts, juntando com o valor anterior
Set-Item WSMan:\localhost\Client\TrustedHosts -value "$value, PC-REMOTO-2" 
Adicionando vários trusted hosts.

Depois, ao usar o comando Get-Item para verificar os trusted hosts, é possível notar que agora há dois computadores.

Verificando os novos trusted hosts.

Passo 4 – Testar a conexão

Agora vamos reiniciar o WinRM em todos os PCs envolvidos na conexão remota. Para isso, execute o seguinte comando:

Restart-Service WinRM

Depois, vamos testar se há conexão entre o PC Local e o Remoto. Use o seguinte comando:

Test-WsMan <NOME-PC-REMOTO>

Resultado do Test-WsMan quando o computador remoto está respondendo.

Passo 6 – Criar um usuário remoto

No PC remoto, crie um usuário com privilégios de Administrador. Para fazer isso rapidamente, vá no PC Remoto e execute o seguinte comando:

#pega a senha
$password = Read-Host –AsSecureString <enter>
#cria um novo usuário
New-LocalUser "The Manager" -Password $password   
#adiciona o usuário ao grupo de Administradores
Add-LocalGroupMember -Group "Administradores" -Member "The Manager"

Para verificar se o novo usuário foi criado, digite o comando Get-LocalGroupMember "Administradores" – Ele deve aparecer na lista.

Atenção! Esse passo é opcional, considerando que já exista um usuário que possa ser usado no PC remoto.

Passo 7 – Executar comandos no PC remoto

Se o comando Test-WsMan está OK, então é possível executar comandos no PC Remoto seguindo a seguinte sintaxe:

Invoke-Command -ComputerName <NOME-PC-REMOTO> -Credential <USER-NAME-REMOTO> -ScriptBlock { comandos powershell aqui! }

Note que para isso dar certo, é necessário que um usuário remoto seja criado. Ao pressionar ENTER, será pedida a senha do usuário.

A sintaxe também aceita o pipeline, ou seja, a saída de um comando pode ser a entrada de outro. Veja:

Invoke-Command -ComputerName <NOME-PC-REMOTO> -Credential <USER-NAME-REMOTO> -ScriptBlock { get-process } | format-list id, processname

Neste exemplo, listamos os processos do PC remoto e passamos a saída para o pipeline, mostrando apenas os atributos id e processname.

Passo 8 – Criar uma sessão remota

O comando Invoke-Command é útil, ainda mais considerando a possibilidade de executar vários scripts em vários computadores remotos. Entretanto, há tarefas que fazem mais sentido se abrirmos uma sessão remota e “ficar à vontade” no PC Remoto. Para isso, use o comando:

Enter-PSSession -ComputerName <NOME-PC-REMOTO> -Credential <USER-NAME-REMOTO>

Digite a senha e fique à vontade no PC Remoto!

Considerações finais

Esse tutorial é um simples exemplo de como podemos usar o PowerShell para gerenciar computadores em pequenas redes locais. Entretanto, é possível ir além, gerenciando computadores em redes de maior porte, usando inclusive a internet.

Para saber mais sobre permissões remotas no Windows com PowerShell, consulte a documentação da Microsoft.

Jorge Luís Gregório

Jorge Luís Gregório

Professor e entusiasta de tecnologia, estudioso da cultura NERD e fã de quadrinhos, animes e games. Mais um pai de menino, casado com a mulher mais linda da galáxia e cristão convicto. Gosto de ler ficção científica e discutir tecnologia, filmes, seriados, teologia, filosofia e política. Quer falar sobre esses e diversos outros assuntos? Venha comigo!