TÓPICO
about_Remote_FAQ
DESCRIÇÃO RESUMIDA
Contém perguntas e respostas sobre como executar comandos remotos
no Windows PowerShell.
DESCRIÇÃO LONGA
Ao trabalhar remotamente, você digita comandos do Windows
PowerShell em um computador (conhecido como "computador local"),
mas os comandos são executados em outro computador (conhecido como
"computador remoto"). A experiência do trabalho remoto deve ser
assemelhar ao máximo ao trabalho direto no computador remoto.
Observação: para usar a comunicação remota do Windows PowerShell,
o computador remoto deve ser configurado para
comunicação remota. Para obter mais informações,
consulte about_Remote_Requirements.
OS DOIS COMPUTADORES DEVEM TER O WINDOWS POWERSHELL INSTALADO?
Sim. Para trabalhar remotamente, os computadores locais e remotos
devem ter o Windows PowerShell, o Microsoft .NET Framework 2.0
e o protocolo WS-Management. Quaisquer arquivos e outros recursos
necessários para executar um comando específico devem estar no
computador remoto.
Você deve ter permissão para se conectar ao computador remoto,
para executar o Windows PowerShell e para acessar repositórios de
dados (como arquivos e pastas) e o Registro no computador remoto.
Para obter mais informações, consulte about_Remote_Requirements.
COMO FUNCIONA A COMUNICAÇÃO REMOTA?
Quando você enviar um comando remoto, ele será transmitido pela rede
ao mecanismo do Windows PowerShell no computador remoto e será
executado no cliente do Windows PowerShell no computador remoto.
Os resultados do comando são enviados novamente ao computador local
e aparecem na sessão do Windows PowerShell no computador local.
Para transmitir os comandos e receber a saída, o Windows PowerShell
usa o protocolo WS-Management. Para obter informações sobre
o protocolo WS-Management, consulte "Protocolo WS-Management"
na biblioteca MSDN (Microsoft Developer Network) em
https://go.microsoft.com/fwlink/?LinkId=144634.
A COMUNICAÇÃO REMOTA DO WINDOWS POWERSHELL É SEGURA?
Quando você se conectar a um computador remoto, o sistema usará
as credenciais de nome de usuário e senha no computador local
ou as credenciais fornecidas no comando para fazer logon no
computador remoto. As credenciais e o restante da transmissão
serão criptografados.
Para adicionar proteção, você pode configurar o computador remoto
para usar o protocolo SSL, em vez de http, para escutar as
solicitações de WinRM (Gerenciamento Remoto do Windows).
Em seguida, os usuários poderão usar os parâmetros UseSSL dos
cmdlets Invoke-Command, New-PSSession e Enter-PSSession ao
estabelecer uma conexão. Esta opção usa o canal HTTP mais seguro,
em vez de HTTP.
TODOS OS COMANDOS REMOTOS REQUEREM A COMUNICAÇÃO REMOTA DO WINDOWS
POWERSHELL?
Não. Vários cmdlets têm um parâmetro ComputerName que permite
a obtenção de objetos no computador remoto.
Esses cmdlets não usam a comunicação remota do Windows PowerShell.
Portanto, você pode usá-los em qualquer computador que esteja
executando esse aplicativo, mesmo se o computador não estiver
configurado para comunicação remota do Windows PowerShell ou se
não atender aos requisitos dessa comunicação remota.
Os cmdlets são os seguintes:
Get-Process
Get-Service
Get-WinEvent
Get-EventLog
Get-WmiObject
Test-Connection
Para localizar todos os cmdlets com o parâmetro ComputerName, digite:
get-help * -parameter ComputerName
Para determinar se o parâmetro ComputerName de um cmdlet
específico requer a comunicação remota do Windows PowerShell,
consulte a descrição do parâmetro. Para exibir a descrição do
parâmetro, digite:
get-help <nome-do-cmdlet> -parameter ComputerName
Por exemplo:
get-help get-process -parameter Computername
Para todos os outros comandos, use o cmdlet Invoke-Command.
COMO EXECUTAR COMANDO EM UM COMPUTADOR REMOTO?
Para executar um comando em um computador remoto, use o cmdlet
Invoke-Command.
Coloque o comando é entre chaves ( {} ) para torná-lo um bloco de
scripts. Use o parâmetro ScriptBlock de Invoke-Command para
especificar o comando.
Você pode usar o parâmetro ComputerName de Invoke-Command para
especificar um computador remoto. Você pode criar uma conexão
persistente com um computador remoto (uma sessão) e usar o parâmetro
Session de Invoke-Command para executar o comando na sessão.
Por exemplo, os comandos a seguir executam o comando Get-Process remotamente.
invoke-command -computername Server01, Server02 -scriptblock {get-process}
- OU -
invoke-command -session $s -scriptblock {get-process}
Para interromper um comando remoto, digite CTRL+C. A solicitação
de interrupção é transmitida ao computador remoto, onde o comando
remoto é finalizado.
Para obter mais informações sobre comandos remotos, consulte
about_Remote e os tópicos da Ajuda sobre cmdlets que oferecem
suporte à comunicação remota.
POSSO EMITIR O COMANDO "TELNET" EM UM COMPUTADOR REMOTO?
Você pode usar o cmdlet Enter-PSSession para iniciar uma sessão
interativa com um computador remoto.
No prompt do Windows PowerShell, digite:
Enter-PSSession <ComputerName>
O prompt de comando é alterado para indicar que você está
conectado ao computador remoto.
<ComputerName>\C:>
Agora, os comandos que você digita são executados no computador
remoto, como se você os tivesse digitando diretamente nesse
computador.
Para encerrar a sessão interativa, digite:
Exit-PSSession
Uma sessão interativa é uma sessão persistente que usa
o protocolo WS-Management. Não é o mesmo que usar o Telnet,
mas proporciona uma experiência semelhante.
Para obter mais informações, consulte Enter-PSSession.
POSSO CRIAR UMA CONEXÃO PERSISTENTE?
Sim. Você pode executar comandos remotos especificando o nome do
computador remoto, seu nome NetBIOS ou seu endereço IP. Você pode
executar comandos remotos especificando uma sessão do Windows
PowerShell (PSSession) conectada ao computador remoto.
Quando você usar o parâmetro ComputerName de Invoke-Command ou
Enter-PSSession, o Windows PowerShell estabelecerá uma conexão
temporária. O Windows PowerShell usará a conexão para executar
apenas o comando atual e, em seguida, fechará a conexão. Esse
é um método muito eficiente para a execução de um ou vários comandos
não relacionados, até mesmo em diversos computadores remotos.
Quando você usa o cmdlet New-PSSession para criar uma PSSession,
o Windows PowerShell estabelece uma conexão persistente para
a PSSession. Em seguida, você pode executar vários comandos na
PSSession, inclusive comandos que compartilham dados.
Geralmente, você cria uma PSSession para executar uma série de
comandos relacionados que compartilham dados. Caso contrário,
a conexão temporária criada pelo parâmetro ComputerName será
suficiente para a maioria dos comandos.
Para obter mais informações sobre sessões, consulte about_PSSessions.
POSSO EXECUTAR COMANDOS EM MAIS DE UM COMPUTADOR POR VEZ?
Sim. O parâmetro ComputerName do cmdlet Invoke-Command aceita
vários nomes de computador e o parâmetro Session aceita várias
PSSessions.
Quando você executa o comando Invoke-Command, o Windows PowerShell
executa os comandos em todos os computadores ou PSSessions
especificados.
O Windows PowerShell pode gerenciar centenas de conexões remotas
simultâneas. No entanto, o número de comandos remotos que você
pode enviar possivelmente será limitado pelos recursos do seu
computador e por sua capacidade de estabelecer e manter várias
conexões de rede.
Para obter mais informações, consulte o exemplo no tópico da Ajuda
Invoke-Command.
ONDE ESTÃO OS MEUS PERFIS?
Os perfis do Windows PowerShell não são executados automaticamente
em sessões remotas; portanto, os comandos que o perfil adiciona
não estão presentes na sessão. Além disso, a variável automática
$profile não é populada em sessões remotas.
Para executar um perfil em uma sessão, use o cmdlet Invoke-Command.
Por exemplo, o comando a seguir executa o perfil CurrentUserCurren
tHost do computador local na sessão em $s.
invoke-command -session $s -filepath $profile
O comando a seguir executa o perfil CurrentUserCurrentHost do
computador remoto na sessão em $s. Devido ao fato de a variável
$profile não ser populada, o comando usa o caminho explícito para
o perfil.
invoke-command -session $s {. "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"}
Depois de executar esse comando, os comandos que o perfil
adiciona à sessão estão disponíveis em $s.
Você também pode usar um script de inicialização em uma
configuração de sessão para executar um perfil em cada sessão
remota que usa a configuração de sessão.
Para obter mais informações sobre os perfis do Windows
PowerShell, consulte about_Profiles. Para obter mais informações
sobre as configurações de sessão, consulte Register-PSSessionConfi
guration.
COMO A LIMITAÇÃO FUNCIONA NOS COMANDOS REMOTOS?
Para facilitar o gerenciamento dos recursos no computador local,
o Windows PowerShell inclui um recurso de limitação por comando que
permite limitar o número de conexões remotas simultâneas estabelecidas
para cada comando.
O padrão é 32 conexões simultâneas, mas você pode usar os
parâmetros ThrottleLimit dos cmdlets para definir um limite
personalizado para comandos específicos.
Ao usar o recurso de limitação, lembre-se de que ele é aplicado
a cada comando, e não à sessão inteira ou ao computador. Se você
estiver executando comandos simultaneamente em várias sessões ou
PSSessions, o número de conexões simultâneas será a soma das
conexões simultâneas em todas as sessões.
Para localizar cmdlets com o parâmetro ThrottleLimit, digite:
get-help * -parameter ThrottleLimit
HÁ DIFERENÇAS ESPECÍFICAS DE SISTEMA NA COMUNICAÇÃO REMOTA?
Ao executar comandos em vários computadores, esteja ciente das
diferenças entre os computadores remotos, como sistemas
operacionais, estrutura do sistema de arquivos e o Registro.
Quando você se conectar a um computador remoto com Windows Vista
ou Windows Server 2003, o local de inicialização padrão será
o diretório base do usuário atual, armazenado na variável de
ambiente %homepath% (env:homepath de $) e na variável $home do
Windows PowerShell. No Windows Vista, o diretório base é geralmente
C:\Users\<NomeDoUsuário>. No Windows Server 2003, o diretório base
é geralmente C:\Documents and Settings\<NomeDoUsuário>.
Quando você se conectar a um computador remoto com Windows XP,
o local de inicialização padrão será o diretório base do usuário
padrão, armazenado na variável de ambiente %homepath%
($env:homepath) do usuário padrão. O diretório base é normalmente
C:\Documents and Setting\Default User.
A SAÍDA DOS COMANDOS REMOTOS É DIFERENTE DA SAÍDA LOCAL?
Ao usar o Windows PowerShell localmente, você envia e recebe
objetos do .NET Framework "ao vivo"; são objetos associados
a programas reais ou componentes de sistema. Quando você chamar
os métodos ou alterar as propriedades dos objetos ao vivo, as
alterações afetarão o programa ou componente real. Quando as
propriedades de um programa ou componente forem alteradas, as
propriedades do objeto que os representam também serão alteradas.
No entanto, como a maioria dos objetos ao vivo não pode ser
transmitidos pela rede, o Windows PowerShell "serializa" a maioria
dos objetos enviados em comandos remotos, ou seja, ele converte
cada objeto em uma série de elementos de dados XML (Idioma de
Restrição no XML [CLiXML]) para transmissão.
Quando o Windows PowerShell recebe um objeto serializado, ele
converte o XML em um tipo de objeto desserializado. O objeto
desserializado é um registro preciso das propriedades do programa
ou componente em um momento anterior, mas não é mais "ao vivo",
ou seja, ele não é mais diretamente associado ao componente.
Os métodos são removidos porque não são mais efetivos.
Normalmente, você pode usar objetos desserializados da mesma
maneira que usaria objetos ao vivo, mas deve estar ciente de suas
limitações. Além disso, os objetos retornados pelo cmdlet
Invoke-Command têm propriedades adicionais que o ajudam
a determinar a origem do comando.
Alguns tipos de objeto, como DirectoryInfo e GUIDs, são
convertidos novamente em objetos ao vivo quando são recebidos.
Esses objetos não precisam de nenhum tratamento ou formatação
especial.
Para obter informações sobre como interpretar e formatar a saída
remota, consulte about_Remote_Output.
POSSO EXECUTAR TRABALHOS EM SEGUNDO PLANO REMOTAMENTE?
Sim. Um trabalho em segundo plano do Windows PowerShell é um
comando executado de modo assíncrono sem interagir com a sessão.
Quando você inicia um trabalho em segundo plano, o prompt de
comando retorna imediatamente e você pode continuar trabalhando na
sessão durante a execução do trabalho, mesmo se a execução demorar
muito.
Você pode iniciar um trabalho em segundo plano até mesmo enquanto
outros comandos estiverem em execução, pois trabalhos em segundo
plano sempre são executados de forma assíncrona em uma sessão
temporária.
Você pode executar trabalhos em segundo plano em um computador
local ou remoto. Por padrão, um trabalho em segundo plano
é executado no computador local. No entanto, você pode usar
o parâmetro AsJob do cmdlet Invoke-Command para executar qualquer
comando remoto como um trabalho em segundo plano. Além disso,
você pode usar Invoke-Command para executar um comando Start-Job
remotamente.
Para obter mais informações sobre trabalhos em segundo plano no
Windows PowerShell,
POSSO EXECUTAR PROGRAMAS WINDOWS EM UM COMPUTADOR REMOTO?
Você pode usar os comandos remotos do Windows PowerShell para
executar programas baseados no Windows em computadores remotos.
Por exemplo, você pode executar Shutdown.exe ou Ipconfig em um
computador remoto.
No entanto, não é possível usar comandos do Windows PowerShell
para abrir a interface de usuário de nenhum programa em um
computador remoto.
Quando você inicia um programa Windows em um computador remoto,
o comando não é concluído e o prompt de comando do Windows
PowerShell só é retornado depois que o programa é concluído ou
você pressiona CTRL+C para interromper o comando. Por exemplo,
se você executar o programa IpConfig em um computador remoto,
o prompt de comando só será retornado depois que IpConfig for
concluído.
Se você usar comandos remotos para iniciar um programa que tenha
uma interface de usuário, o processo do programa será iniciado,
mas a interface de usuário não aparecerá. O comando do Windows
PowerShell não é concluído e o prompt de comando só é retornado
depois que você interrompe o processo do programa ou pressiona
CTRL+C para interromper o comando e o processo.
Por exemplo, se você usar um comando do Windows PowerShell para
executar o Bloco de Notas em um computador remoto, o processo do
Bloco de Notas iniciará no computador remoto, mas a interface de
usuário do aplicativo não aparecerá. Para interromper o comando
e restaurar o prompt de comando, pressione CTRL+C.
POSSO LIMITAR OS COMANDOS QUE OS USUÁRIOS PODEM EXECUTAR REMOTAMENTE
EM MEU COMPUTADOR?
Sim. Cada sessão remota deve usar um das configurações de sessão
no computador remoto. Você pode gerenciar as configurações de
sessão em seu computador (e as permissões para essas
configurações de sessão) para determinar quem pode executar
comandos remotamente nele e quais comandos podem ser executados.
Uma configuração de sessão define o ambiente durante a sessão.
Você pode definir a configuração usando um assembly que
implementa uma nova classe de configuração ou usando um script
executado na sessão.
A configuração pode determinar os comandos que estarão
disponíveis na sessão. A configuração pode incluir itens que
protegem o computador, como configurações que limitam a
quantidade de dados que a sessão pode receber remotamente em um
único objeto ou comando. Você também pode especificar um
descritor de segurança que determina as permissões necessárias
para usar a configuração.
O cmdlet Enable-PSRemoting cria uma configuração de sessão padrão
em seu computador, Microsoft.PowerShell (e Microsoft.PowerShell32
em sistemas operacionais de 64 bits). Enable-PSRemoting define
o descritor de segurança da configuração para permitir que somente
os membros do grupo Administradores do computador o utilizem.
Você pode usar os cmdlets de configuração de sessão para editar
as configurações de sessão padrão, criar novas configurações de
sessão e alterar os descritores de segurança de todas as
configurações de sessão.
Quando os usuários utilizarem o cmdlet Invoke-Command,
New-PSSession ou Enter-PSSession, eles poderão usar o parâmetro
ConfigurationName para indicar a configuração de sessão usada
durante a sessão. Além disso, eles podem alterar a configuração
padrão que as sessões usam alterando o valor da variável de
preferência $PSSessionConfigurationName na sessão.
Para obter mais informações sobre as configurações de sessão,
consulte a Ajuda sobre os cmdlets de configuração de sessão.
Para localizar os cmdlets de configuração de sessão, digite:
get-command *pssessionconfiguration
O QUE SÃO CONFIGURAÇÕES FAN-IN E FAN-OUT?
O cenário de comunicação remota mais comum do Windows PowerShell
envolvendo vários computadores é a configuração um-para-muitos,
na qual um computador local (o computador do administrador) executa
comandos do Windows PowerShell em diversos computadores remotos.
Isso é conhecido como cenário "fan-out".
No entanto, em algumas empresas, a configuração em vigor
é muitos-para-um, na qual vários computadores cliente se conectam
a um único computador remoto que está executando o Windows
PowerShell, como um servidor de arquivos ou um quiosque.
Isso é conhecido como configuração "fan-in".
A comunicação remota do Windows PowerShell oferece suporte às
configurações fan-in e fan-out.
Na configuração fan-out, o Windows PowerShell usa o protocolo
WS-Management e o serviço WinRM que oferece suporte à
implementação do WS-Management da Microsoft. Quando um computador
local se conecta a um computador remoto, o WS-Management
estabelece uma conexão e usa um plug-in para que o Windows
PowerShell inicie o processo de host do Windows PowerShell
(Wsmprovhost.exe) no computador remoto. O usuário pode especificar
uma porta alternativa, uma configuração de sessão alternativa
e outros recursos para personalizar a conexão remota.
Para oferecer suporte à configuração "fan-in", o Windows
PowerShell usa o IIS (Serviços de Informações da Internet) para
hospedar o WS-Management, carregar o plug-in do Windows PowerShell
e iniciar o Windows PowerShell. Nesse cenário, em vez de iniciar
cada sessão do Windows PowerShell em um processo separado, todas
as sessões do Windows PowerShell são executadas no mesmo processo
de host.
Não há suporte para o gerenciamento remoto de fan-in e a hospedagem
do IIS no Windows XP ou no Windows Server 2003.
Em uma configuração fan-in, o usuário pode especificar um URI de
conexão e um ponto de extremidade de HTTP, incluindo o transporte,
o nome do computador, a porta e nome do aplicativo. O IIS
encaminha todas as solicitações com um nome de aplicativo
especificado para o aplicativo. O padrão é WS-Management, que pode
hospedar o Windows PowerShell.
Você pode especificar também um mecanismo de autenticação
e proibir ou permitir o redirecionamento a partir dos pontos de
extremidade de HTTP e HTTPS.
POSSO TESTAR A COMUNICAÇÃO REMOTA EM UM ÚNICO COMPUTADOR (E NÃO EM
UM DOMÍNIO)?
Sim. A comunicação remota do Windows PowerShell estará disponível
até mesmo quando o computador local não estiver em um domínio.
Você pode usar os recursos de comunicação remota para se conectar
a sessões e criar sessões no mesmo computador. Os recursos
funcionam da mesma forma que quando você se conecta a um
computador remoto.
Para executar comandos remotos no computador de um grupo de
trabalho, altere as seguintes configurações do Windows no computador.
Cuidado: estas configurações afetam todos os usuários do sistema
e podem tornar o sistema mais vulnerável a um ataque
mal-intencionado. Tenha cuidado ao fazer essas alterações.
-- Windows XP com SP2:
Use Configurações Locais de Segurança (Secpol.msc) para
alterar a configuração da diretiva "Acesso à rede: modelo de
compartilhamento e segurança para contas locais" em Security
Settings\Local Policies\Security Options para "Clássico".
-- Windows Vista:
Crie a seguinte entrada do Registro e defina seu valor para 1:
LocalAccountTokenFilterPolicy em
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Você pode usar o seguinte comando do Windows PowerShell para
adicionar essa entrada:
new-itemproperty `
-path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System `
-name LocalAccountTokenFilterPolicy -propertyType DWord -value 1
-- Windows 2003:
Nenhuma alteração é necessária porque a configuração padrão
da diretiva "Acesso à rede: modelo de compartilhamento
e segurança para contas locais" é "Clássico". Verifique
a configuração caso ela tenha sido alterada.
POSSO EXECUTAR COMANDOS REMOTOS EM UM COMPUTADOR DE OUTRO DOMÍNIO?
Sim. Normalmente, os comandos são executados sem erro, embora
talvez seja necessário usar o parâmetro Credential do cmdlet
Invoke-Command, New-PSSession ou Enter-PSSession para fornecer as
credenciais de um membro do grupo Administradores no computador
remoto. Isso às vezes será necessário até mesmo quando o usuário
atual for membro do grupo Administradores nos computadores locais
e remotos.
No entanto, se o computador remoto não estiver em um domínio em
que o computador local confie, o computador remoto talvez não
possa autenticar as credenciais do usuário.
Para habilitar a autenticação, use o seguinte comando para
adicionar o computador remoto à lista de hosts confiáveis do
computador local no WinRM.
Digite o comando no prompt do Windows PowerShell.
set-item WSMan:\localhost\Client\TrustedHosts -value
<Nome-do-computador-remoto>
Por exemplo, para adicionar o computador Server01 à lista de
hosts confiáveis no computador local, digite o seguinte comando
no prompt do Windows PowerShell:
set-item WSMan:\localhost\Client\TrustedHosts -value Server01
CONSULTE TAMBÉM
about_Remote
about_Profiles
about_PSSessions
about_Remote_Jobs
Invoke-Command
New-PSSession