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:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Processo
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
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:
- Perguntas frequentes sobre comunicação remota do PowerShell
- Register-PSSessionConfiguration
- Import-PSSession
Para obter ajuda com erros de comunicação remota, consulte about_Remote_Troubleshooting.