Você pode executar comandos em um ou vários computadores com um único comando do Windows PowerShell. O Windows PowerShell oferece suporte à computação remota usando várias tecnologias, inclusive WMI, RPC e WS-Management.
Comunicação remota sem configuração
Muitos cmdlets do Windows PowerShell têm o parâmetro ComputerName, que o permite coletar dados e alterar configurações em um ou mais computadores remotos. Eles usam diversas tecnologias de comunicação e muitos deles funcionam em todos os sistemas operacionais Windows aos quais o Windows PowerShell oferece suporte, sem nenhuma configuração especial.
Esses cmdlets incluem:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-HotFix
- Get-WmiObject
Normalmente, os cmdlets que oferecem suporte à 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 na sua sessão, digite:
get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
Comunicação remota do Windows PowerShell
A comunicação remota do Windows PowerShell, que usa o protocolo WS-Management, permite executar qualquer comando do Windows PowerShell em um ou vários computadores remotos. Ele permite que você estabeleça conexões persistentes, inicie sessões interativas 1:1 e execute scripts em vários computadores.
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 about_Remote_Requirements.
Depois que você configurar a comunicação remota do Windows PowerShell, muitas estratégias de comunicação remota serão disponibilizadas. O restante desse documento lista apenas algumas delas. Para obter mais informações, consulte about_Remote e about_Remote_FAQ.
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 ao qual você está conectado. A partir desse ponto, qualquer comando que você digitar no prompt será executado no computador remoto, e os resultados serã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 Enter-PSSession e Exit-PSSession.
Executar um comando remoto
Para executar qualquer comando em um ou mais computadores remotos, 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 {get-UICulture}
A saída será retornada 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
Para obter mais informações sobre o cmdlet Invoke-Command, consulte Invoke-Command.
Executar um script
Para executar um script em um ou vários computadores remotos, use o parâmetro FilePath do cmdlet Invoke-Command. O script deve estar ativo ou acessível no computador local. Os resultados são retornados ao 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
Para obter mais informações sobre o cmdlet Invoke-Command, consulte Invoke-Command.
Estabelecer uma conexão persistente
Para executar uma série de comandos relacionados que compartilham dados, crie uma sessão no computador remoto e use o cmdlet Invoke-Command para executar comandos na sessão criada. Para criar uma sessão remota, use o cmdlet New-PSSession.
Por exemplo, o comando a seguir cria uma sessão remota no computador Server01 e outra sessão remota no computador Server02. Ele salva os objetos da sessão na variável $s.
$s = new-pssession -computername Server01, Server02
Agora que as sessões estão estabelecidas, você pode executar qualquer comando nelas. Como as sessões são persistentes, você pode coletar dados em um comando e usá-los em um comando subsequente.
Por exemplo, o comando a seguir executa um comando Get-Hotfix nas sessões na 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 em comandos subsequentes, como o seguinte. Os resultados são exibidos no computador local.
invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"
Comunicação remota avançada
O gerenciamento remoto do Windows PowerShell começa aqui. Com os cmdlets instalados no Windows PowerShell, você pode estabelecer e configurar sessões remotas nos computadores locais e remotos, criar sessões personalizadas e restritas, permitir que os usuários importem comandos de uma sessão remota que, na verdade, são executados implicitamente nessa sessão, configurar a segurança de uma sessão remota e muito mais.
Para simplificar a configuração remota, o Windows PowerShell inclui um provedor de WS-Management. A unidade WSMAN: criada pelo provedor permite que você navegue por uma hierarquia de configurações nos computador locais e remotos. Para obter mais informações sobre o provedor de WS-Management, consulte WSMan Provider e about_WS-Management_Cmdlets ou, no console do Windows PowerShell, digite "get-help wsman".
Para obter mais informações, consulte about_Remote_FAQ, New-PSSessionConfiguration e Import-PSSession. Para obter ajuda para solucionar erros de comunicação remota, consulte about_Remote_Troubleshooting.
See Also