Partilhar via


Executar Comandos Remotos

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

O PowerShell oferece suporte à comunicação remota WMI, WS-Management e SSH. No PowerShell 7 e superior, o RPC é suportado apenas no Windows.

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

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 configurações em um ou mais computadores remotos. Esses cmdlets usam protocolos de comunicação variados e funcionam em todos os sistemas operacionais Windows sem nenhuma configuração especial.

Esses cmdlets incluem:

Normalmente, os cmdlets que suportam comunicação remota sem configuração especial têm o parâmetro ComputerName e não têm o 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 mais 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 mais 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 estarão disponíveis para você. Este artigo lista apenas alguns deles. Para obter mais informações, consulte Sobre o remoto.

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 é alterado para exibir o nome do computador remoto. Todos os 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 Enter-PSSession cmdlets 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}

A saída é devolvida ao 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 vários computadores remotos, use o parâmetro FilePath do Invoke-Command cmdlet. O script deve estar ligado ou acessível ao computador local. Os resultados são devolvidos ao computador local.

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

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

Estabelecer uma conexão persistente

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

$s = New-PSSession -ComputerName Server01, Server02

Agora que as sessões estão 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.

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

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

Agora você pode usar os dados na $h variável 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:

  • Configurar e criar sessões remotas a partir das extremidades local e remota
  • Crie sessões personalizadas e restritas
  • Importar comandos de uma sessão remota que realmente 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 WSMAN: unidade que permite navegar por uma hierarquia de definições de configuração no computador local e nos computadores remotos.

Para obter mais informações sobre o provedor WSMan, consulte Provedor WSMan e Sobre cmdlets WS-Management ou, no console do Windows PowerShell, digite Get-Help wsman.

Para obter mais informações, consulte:

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

Consulte Também