Você já quis executar comandos do PowerShell em uma máquina remota do conforto da sua estação de trabalho? Bem, com PowerShell Remoting você pode. Com o PowerShell remoto, você pode executar comandos e scripts em vários sistemas remotos de maneira sustentável.
Parece interessante? Continue lendo para aprender como domar essas máquinas remotas do jeito do PowerShell.
Pré-requisitos
Este tutorial será uma demonstração prática. Se você quiser acompanhar, certifique-se de ter pelo menos três computadores com PowerShell 7. Um será seu computador de gerenciamento e os outros dois serão as máquinas remotas.
Este tutorial usará os seguintes computadores.
- A Windows 10 PC with PowerShell 7 installed as the management computer. You will launch remote commands from this machine.
- A Windows 10 PC with PowerShell 7 installed. This machine will be the endpoint for remote PowerShell over WinRM.
- A user account on the remote Windows machine with local administrator rights. This tutorial uses a user account called ma.
- Máquina Linux com SSHD habilitado para servir como um ponto de extremidade remoto do PowerShell através do SSH. Este tutorial utiliza o Fedora 35.
- Uma conta de usuário para executar comandos remotos na máquina Linux. A conta deve ter acesso sudo e SSH. Este tutorial usa uma conta chamada test. Crie uma conta de usuário neste ponto se você não tiver uma em sua máquina Linux
Habilitando o PowerShell Remoto no Windows Via WinRM
Ao instalar o PowerShell 7, há uma opção para habilitar o remoting do PowerShell, e você pode tê-lo habilitado então. Mas, para ter certeza, siga as etapas abaixo para habilitar o PowerShell remoto.
1. Faça login no PC remoto com Windows 10.
2. Abra o PowerShell como administrador.
3. Execute o comando abaixo para habilitar o PowerShell remoto.
O comando executa várias alterações de configuração, que você verá no console.

Habilitando o PowerShell Remoto no Linux via SSH
O WinRM é exclusivo do Windows, o que significa que você não pode habilitar o PowerShell remoto no Linux com ele. Em vez disso, você pode habilitar o PowerShell remoto via SSH no Linux. Supondo que você já tenha instalado o PowerShell, siga as etapas abaixo.
1. Faça login no seu sistema Linux remoto e abra uma sessão de terminal.
2. Abra o arquivo de configuração do servidor SSH em um editor de texto. Use o editor de texto de sua escolha, como Gedit, Sublime ou Nano. Este exemplo usa o Gedit.
3. Em seguida, adicione a linha abaixo ao arquivo. Esta linha cria um subsistema SSH que hospeda um processo do PowerShell.

4. Feche o editor.
5. Finalmente, reinicie o servidor SSH executando o seguinte comando.
Adicionando Hosts Confiáveis do PowerShell Remoto na Máquina Local
Neste ponto, seu computador remoto está pronto para receber comandos. Mas, seu computador de gerenciamento pode recusar a conexão aos hosts do PowerShell remoto se eles não estiverem na lista de Hosts Confiáveis. Para evitar possíveis problemas de conexão remota, você deve adicionar os hosts remotos à sua lista de Hosts Confiáveis.
Abra o PowerShell como administrador no seu computador de gerenciamento.
Execute o comando winrm
abaixo. Este comando adiciona as suas máquinas Windows remota (192.168.8.107
) e Linux (192.168.8.171
) à lista de hosts confiáveis do seu computador.

Executando Comandos em Computadores Remotos
Com todas as peças no lugar, você irá executar comandos na máquina remota nesta seção.
1. Abra uma nova sessão do PowerShell no seu computador de gerenciamento.
2. Agora, execute o comando Invoke-Command
abaixo para listar os primeiros cinco serviços na máquina remota como usuário ma
. O comando a ser executado aparece entre as chaves do switch ScriptBlock
, conforme mostrado abaixo.

3. Para realizar o mesmo em um host Linux remoto, execute o comando abaixo em vez disso. Note que -HostName
substituiu -ComputerName
, e -UserName
substituiu -ComputerName
. Esses parâmetros indicam ao cmdlet Invoke-Command
que o alvo é um host SSH.

Executando Scripts em Computadores Remotos
Você também pode executar um arquivo de script do PowerShell em um computador remoto com o cmdlet Invoke-Command
. Mas em vez de especificar o parâmetro -ScriptBlock
, você irá especificar o parâmetro -FilePath
seguido do caminho local do script.
1. Primeiro, crie um arquivo de script do PowerShell chamado nametime.ps1
no seu computador local.
2. Abra o script no seu editor de script preferido e adicione o seguinte código. Salve o arquivo posteriormente.

3. Execute o cmdlet Invoke-Command
com o parâmetro -FilePath
. O -FilePath
deve apontar para o arquivo de script. Neste exemplo, o arquivo de script está no mesmo diretório de trabalho.

Gerenciando um Computador Remoto de Forma Interativa
Na seção anterior, você viu como executar comandos individuais em uma máquina remota. Nesta seção, você aprenderá a abrir uma sessão interativa, para que você possa executar vários comandos na máquina remota como se fosse local.
1. Execute o comando Enter-PSSession
para iniciar uma sessão remota na máquina em 192.168.8.107
como usuário ma
.
Informe a senha da conta de usuário remota, ma, no prompt, conforme mostrado abaixo.

Você verá um novo prompt, como mostrado abaixo. O endereço IP entre colchetes indica o host do PowerShell remoto.

3. Liste os arquivos no diretório de trabalho atual com o comando dir
, conforme mostrado abaixo. Você pode executar quantos comandos do PowerShell desejar dentro de uma sessão dir
Os conteúdos do diretório devem estar na tela, como na captura de tela abaixo.

4. Execute o cmdlet Exit-PSSession
abaixo para sair da sessão assim que terminar de gerenciar a máquina remota.
Ao sair, você deve retornar a um prompt local, conforme mostrado na captura de tela abaixo.

Desconectar e Reconectar Sessões Remote PowerShell
É possível armazenar uma sessão de forma persistente como uma alternativa a sessões interativas ou comandos únicos. Armazenar uma sessão permite alternar entre sessões sem perder o contexto. Nesta seção, você aprenderá a criar e gerenciar sessões persistentes.
1. Execute o cmdlet New-PSSession
para criar uma sessão no computador remoto, 192.168.8.107
, como usuário ma
(-Credential
). Salve a sessão na variável $var
, da seguinte forma.
2. Execute a variável $var
para visualizar seu conteúdo, conforme abaixo
Como mostrado abaixo, você deverá ver um objeto de sessão com um RemoteMachine ComputerType e State definidos como Opened.

3. Execute o comando Enter-PSSession
para entrar na sessão armazenada em $var
.
Se tudo estiver correto, o prompt mudará para um prompt remoto sem mais saída, como mostrado abaixo.

4. Crie uma variável, $rem1
, dentro da sessão. Use qualquer nome de variável e string de identificação que desejar. Você usará esta variável mais tarde para determinar se conectou à mesma sessão.
5. Execute o comando abaixo para sair da sessão remota do PowerShell.

6. Restabeleça uma sessão remota do PowerShell.
7. Execute a variável $rem1
no prompt da sessão remota, como mostrado abaixo, para visualizar seu valor.
Deve ver o mesmo valor que definiu anteriormente antes de sair da sessão remota do PowerShell, confirmando que se reconectou à mesma sessão.

8. Execute o comando Exit-PSSession
para sair da sessão novamente conforme a seguir.
9. Por fim, execute Invoke-Command
com o interruptor session
definido como $var
para mostrar o nome do host da máquina remota na mesma sessão remota. Este método é uma maneira alternativa de executar comandos na mesma sessão sem conectar, desconectar e reconectar manualmente a uma única sessão.

10. Execute o Remove-PSSession
para remover a sessão armazenada em $var
completamente.
Conclusão
Parabéns! Ao chegar ao final deste tutorial, aprendeu a gerir um sistema Windows ou Linux com o PowerShell remoto. Este guia teve como objetivo molhar os pés. Por que não mergulhar mais fundo com PowerShell no Linux durante uma sessão remota?