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




Sumário