Executando comandos remotos

Você pode executar comandos em uma ou centenas de computadores com um único comando do PowerShell. O Windows PowerShell dá suporte à computação remota usando várias tecnologias, incluindo WMI, RPC e WS-Management.

O PowerShell dá suporte a WMI, WS-Management e comunicação remota SSH. No PowerShell 7 e superior, o RPC é compatível apenas com o Windows.

Para obter mais informações sobre a comunicação remota no PowerShell, consulte os artigos a seguir:

Comunicação remota do Windows PowerShell sem configuração

Muitos cmdlets do Windows PowerShell têm o parâmetro ComputerName que permite coletar dados e alterar as configurações de um ou mais computadores remotos. Esses cmdlets usam protocolos de comunicação variados e funcionam em todos os sistemas operacionais Windows sem qualquer configuração especial.

Esses cmdlets incluem:

Normalmente, os cmdlets que permitem comunicação remota sem configuração especial têm um parâmetro ComputerName, e não um parâmetro Session. Para localizar esses cmdlets em sua sessão, digite:

Get-Command | Where-Object {
    $_.Parameters.Keys -contains "ComputerName" -and
    $_.Parameters.Keys -notcontains "Session"
}

Comunicação remota do Windows PowerShell

Usando o protocolo WS-Management, a comunicação remota do Windows PowerShell permite executar qualquer comando do Windows PowerShell em um ou vários computadores remotos. Você pode estabelecer conexões persistentes, iniciar sessões interativas e executar scripts em computadores remotos.

Para usar a comunicação remota do Windows PowerShell, o computador remoto deve ser configurado para gerenciamento remoto. Para obter mas informações, incluindo instruções consulte Sobre requisitos remotos.

Depois de configurar a comunicação remota do Windows PowerShell, muitas estratégias de comunicação remota ficam disponíveis para você. Este artigo lista algumas delas. Saiba mais em Sobre comunicação remota.

Iniciar uma sessão interativa

Para iniciar uma sessão interativa com um único computador remoto, use o cmdlet Enter-PSSession. Por exemplo, para iniciar uma sessão interativa com o computador remoto Server01, digite:

Enter-PSSession Server01

O prompt de comando muda para exibir o nome do computador remoto. Quaisquer comandos digitados no prompt são executados no computador remoto, e os resultados são exibidos no computador local.

Para encerrar a sessão interativa, digite:

Exit-PSSession

Para obter mais informações sobre os cmdlets Enter-PSSession e Exit-PSSession, consulte:

Executar um comando remoto

Para executar um comando em um ou mais computadores, use o cmdlet Invoke-Command. Por exemplo, para executar um comando Get-UICulture nos computadores remotos Server01 e Server02, digite:

Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}

O resultado é retornado no seu computador.

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

Executar um script

Para executar um script em um ou mais computadores remotos, use o parâmetro FilePath do cmdlet Invoke-Command. O script deve estar ativado ou acessível para o computador local. Os resultados são retornados no computador local.

Por exemplo, o comando a seguir executa o script DiskCollect.ps1 nos computadores remotos, Server01 e Server02.

Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1

Estabelecer uma conexão persistente

Use o cmdlet New-PSSession para criar uma sessão persistente em um computador remoto. O exemplo a seguir cria sessões remotas no Server01 e Server02. Os objetos de sessão são armazenados na variável $s.

$s = New-PSSession -ComputerName Server01, Server02

Agora que as sessões foram estabelecidas, você pode executar qualquer comando nelas. E como as sessões são persistentes, você pode coletar dados de um comando e usá-los em outro comando.

Por exemplo, o comando a seguir executa um comando Get-HotFix nas sessões da variável $s e salva os resultados na variável $h. A variável $h é criada em cada uma das sessões em $s, mas não existe na sessão local.

Invoke-Command -Session $s {$h = Get-HotFix}

Agora você pode usar os dados na variável $h com outros comandos na mesma sessão. Os resultados são exibidos no computador local. Por exemplo:

Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NT AUTHORITY\SYSTEM"}}

Comunicação remota avançada

O PowerShell inclui cmdlets que permitem a você:

  • Configurar e criar sessões remotas a partir das extremidades local e remota
  • Criar sessões personalizadas e restritas
  • Importar comandos de uma sessão remota que, na verdade, são executados implicitamente na sessão remota
  • Configurar a segurança de uma sessão remota

O PowerShell no Windows inclui um provedor WSMan. O provedor cria uma unidade WSMAN: que permite a navegação por uma hierarquia de definições de configuração no computador local e nos computadores remotos.

Para saber mais sobre o provedor WSMan, confira WSMan Provider e Sobre cmdlets WS-Management ou, no console do Windows PowerShell, digite Get-Help wsman.

Para saber mais, veja:

Para obter ajuda com erros de comunicação remota, consulte about_Remote_Troubleshooting.

Confira também