Como Executar Comandos Usando o PowerShell Remoting
- O que é Acesso Remoto do PowerShell
-
Configurar Ouvintes
WinRM
no PowerShell - Criar uma Nova Sessão PowerShell
- Usar Métodos Invoke para Executar Comandos Rápidos Remotamente no PowerShell

Com o Windows PowerShell, existem várias maneiras de executar um comando em computadores locais ou remotos. Uma maneira é habilitar o acesso remoto do PowerShell e usar os comandos de sessão do PowerShell.
Este artigo discutirá como o acesso remoto do PowerShell funciona, configurando WinRM
, alguns exemplos de comandos de sessão do PowerShell e como podemos acessar um computador remotamente com acesso de administrador.
O que é Acesso Remoto do PowerShell
O Acesso Remoto do PowerShell (ou PSRemoting
) é um dos recursos mais utilizados no PowerShell. Como resultado, podemos nos conectar facilmente a um ou mais computadores remotos e executar comandos usando um único comando.
Em resumo, PSRemoting
nos permite executar comandos em computadores remotos como se estivéssemos sentados na frente deles. Além disso, PSRemoting
fornece recursos que conectam e autenticam um usuário, executam cmdlets remotos e exibem qualquer saída desse cmdlet no computador local.
Pense em PSRemoting
como SSH
ou telnet
ou até mesmo psexec
. É apenas uma maneira de executar comandos em computadores dentro do PowerShell.
PSRemoting
depende fortemente da execução de comandos em uma sessão. Uma sessão é um shell remoto que executa comandos internamente.
Criar uma dessas sessões passa por muitas etapas nos bastidores do console do PowerShell.
Quando iniciamos uma sessão PSRemoting
, os seguintes passos gerais são realizados:
-
O usuário tenta se conectar ao servidor de destino em um ouvinte do
WinRM
. O ouvinte doWinRM
é um pequeno serviço web que roda em um servidor.WinRM
é a versão da Microsoft de um padrão de implementação chamadoWSMan
.WSMan
é um padrão de código aberto criado com muitas outras grandes empresas de tecnologia na época, como Intel, Dell e Sun Microsystems. -
O processo de autenticação começa quando o cliente se conecta ao ouvinte por meio do protocolo HTTP ou HTTPS.
-
Após o cliente se conectar e autenticar no servidor,
PSRemoting
gera uma sessão. -
Depois que o
PSRemoting
gera a sessão, ela fica aberta para uso. O cliente pode começar a enviar informações ao servidor, retornando qualquer saída necessária conhecida como serialização.Essa comunicação é tipicamente criptografada.
Para habilitar PSRemoting
, digite o comando abaixo em seu console PowerShell.
Enable-PSRemoting –Force
Configurar Ouvintes WinRM
no PowerShell
Um cliente precisa de um lugar para se conectar pela rede. O cliente precisa “falar” com algo que está “ouvindo” do outro lado; a parte “ouvindo” é o papel do ouvinte WinRM
.
Você pode descobrir todos os ouvintes WinRM
em execução em qualquer computador Windows usando o comando winrm
abaixo.
winrm e winrm/config/listener
Os ouvintes WinRM
têm alguns componentes essenciais.
- Endereço de escuta – O endereço IP ao qual eles estão vinculados. O endereço de escuta é o endereço IP do servidor ao qual o cliente se conecta.
- Tipo de transporte – Cada ouvinte
WinRM
precisa de uma maneira de se comunicar com o cliente; eles fazem isso por meio de transporte usando HTTP ou HTTPS. - Impressão digital de certificado opcional – Se um ouvinte
WinRM
usar HTTPS para transporte, ele deve saber qual chave privada usar para autenticar o cliente; essa chave é encontrada utilizando uma impressão digital de certificado.
Para adicionar um computador remoto a uma lista de hosts confiáveis para o computador local no WinRM
, digite o seguinte comando abaixo.
winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'
Para verificar e checar a configuração do WinRM
, digite o seguinte comando abaixo.
winrm quickconfig
Criar uma Nova Sessão PowerShell
O comando New-PSSession
cria uma sessão do Windows PowerShell (PSSession
) em um computador local ou remoto. Ao criar uma PSSession
, o PowerShell estabelece uma conexão persistente com o computador remoto.
Podemos executar comandos em um computador remoto sem criar uma PSSession
usando os parâmetros –ComputerName
do Enter-PSSession
ou Invoke-Command
.
Quando você usa o parâmetro –ComputerName
, o PowerShell cria uma conexão temporária usada para o cmdlet e é então fechada posteriormente.
A partir do Windows PowerShell 6.0, podemos usar o Secure Shell (SSH) para criar e estabelecer uma sessão em uma máquina remota se o SSH estiver habilitado no computador local e o computador remoto estiver configurado com um ponto de extremidade SSH do Windows PowerShell.
Um dos benefícios de uma sessão remota iniciada baseada em SSH do Windows PowerShell é que ela pode funcionar em várias plataformas (Windows, Linux, macOS) ou de forma multiplataforma.
Para sessões baseadas em SSH, podemos usar os parâmetros -HostName
ou -SSHConnection
para especificar o computador remoto e outras informações de conexão relevantes.
New-PSSession -ComputerName DC01 -Credential (Get-Credential)
Lembre-se de que a sessão gerada pelo comando New-PSSession
é persistente. Isso significa que podemos usá-la várias vezes.
No entanto, devemos nos lembrar que devemos fechar a sessão após usar o comando Remove-PSSession
para evitar riscos de segurança.
Usar Métodos Invoke para Executar Comandos Rápidos Remotamente no PowerShell
O cmdlet Invoke-Command
é preferível se escrevermos os comandos executados agora, pois mantemos o IntelliSense em nosso IDE. Além disso, Invoke-Command
é vantajoso se executarmos comandos rápidos e fáceis, de uso único.
A sessão de qualquer método Invoke
é não persistente e não mantém nenhuma sessão que usuários mal-intencionados possam abusar.
O trecho abaixo é um exemplo de Invoke-Command
que passa um nome de usuário e uma senha de string segura que permitirá a execução de comandos em nível de administrador.
Exemplo de Script:
$username = "Username"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object { $secstr.AppendChar($_) }
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $secstr
Invoke-Command -ComputerName RemoteServer -ScriptBlock { Get-Process } -Credential $cred
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn