about_Remote_FAQ

Aplica-se a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

TÓPICO

about_Remote_FAQ

DESCRIÇÃO BREVE

Contém perguntas e respostas sobre como executar comandos remotos no Windows PowerShell®.

DESCRIÇÃO LONGA

Quando você trabalha remotamente, você digita comandos no Windows PowerShell em um computador (conhecido como "computador local"), mas os comandos são executados em outro computador (conhecido como o "computador remoto"). A experiência de trabalhar remotamente deve ser o mais parecida possível com trabalhar diretamente no computador remoto.

Observação: Para usar o Windows PowerShell com comunicação remota, os computadores remotos devem estar configurados para isso. 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 e os serviços Web para o protocolo de gerenciamento (WS-Management). Todos os arquivos e outros recursos que são necessários para executar um comando específico devem estar no computador remoto.

Computadores que executam o Windows PowerShell 3.0 e computadores que executam o Windows PowerShell 2.0 podem se conectar remotamente um ao outro e executar comandos remotos. No entanto, alguns recursos, como a capacidade de desconectar de uma sessão e reconectar-se a ela, funcionam apenas quando ambos os computadores estão executando o Windows PowerShell 3.0.

Você deve ter permissão para se conectar ao computador remoto, permissão para executar o Windows PowerShell e permissão para acessar armazenamentos 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ê envia um comando remoto, o comando é transmitido pela rede para o mecanismo do Windows PowerShell no computador remoto e ele é executado no cliente do Windows PowerShell no computador remoto. Os resultados do comando são enviados de volta para o 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 partir do Windows PowerShell 3.0, as sessões remotas são armazenadas no computador remoto. Isso permite que você desconecte da sessão e reconecte-se de uma sessão diferente ou em outro computador sem interromper os comandos ou perder o estado.

A COMUNICAÇÃO REMOTA DO WINDOWS POWERSHELL É SEGURA?

Quando você se conecta a um computador remoto, o sistema usa as credenciais de nome e senha do usuário no computador local ou as credenciais fornecidas no comando para fazer logon no computador remoto. As credenciais e o restante da transmissão são criptografados.

Para incluir proteção adicional, você pode configurar o computador remoto para usar SSL (Secure Sockets Layer) em vez de HTTP para receber as solicitações do WinRM (Windows Remote Management). Em seguida, os usuários podem usar os parâmetros de UseSSL dos cmdlets Invoke-Command, New-PSSession e Enter-PSSession ao estabelecer uma conexão. Essa opção usa um canal HTTPS mais seguro em vez de HTTP.

TODOS OS COMANDOS REMOTOS EXIGEM COMUNICAÇÃO REMOTA DO WINDOWS POWERSHELL?

Não. Vários cmdlets têm um parâmetro ComputerName que permite que você obtenha objetos de computadores remotos.

Esses cmdlets não usam Windows PowerShell com comunicação remota. Assim, você pode usá-los em qualquer computador que esteja executando o Windows PowerShell, mesmo que o computador não esteja configurado para Windows PowerShell com comunicação remota ou se o computador não atender os requisitos do Windows PowerShell para comunicação remota.

Esses cmdlets incluem os seguintes cmdlets:

       Get-Process
       Get-Service
       Get-WinEvent
       Get-EventLog
       Get-WmiObject
       Test-Connection

Para localizar todos os cmdlets com um parâmetro ComputerName, digite:

        Get-Help * -Parameter ComputerName
        or 
        Get-Command -ParameterName ComputerName

Para determinar se o parâmetro ComputerName de um determinado cmdlet requer o Windows PowerShell com comunicação remota, consulte a descrição do parâmetro. Para exibir a descrição do parâmetro, digite:

        Get-Help <cmdlet-name> -Parameter ComputerName

Por exemplo:

        Get-Help Get-Process -Parameter Computername

Para todos os outros comandos, use o cmdlet Invoke-Command.

COMO POSSO EXECUTAR UM COMANDO EM UM COMPUTADOR REMOTO?

Para executar um comando em um computador remoto, use o cmdlet Invoke-Command.

Coloque seu comando entre chaves ({}) para torná-lo um bloco de script. 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. Ou, você pode criar uma conexão persistente com um computador remoto (uma sessão) e, em seguida, usar o parâmetro Session de Invoke-Command para executar o comando na sessão.

Por exemplo, os seguintes comandos executam um comando Get-Process remotamente.

      Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-Process}

        - OR -

      Invoke-Command -Session $s -ScriptBlock {Get-Process}

Para interromper um comando remoto, pressione CTRL + C. A solicitação de interrupção é passada para o computador remoto no qual o comando remoto é encerrado.

Para obter mais informações sobre comandos remotos, consulte about_Remote e os tópicos de ajuda para os cmdlets que dão suporte à comunicação remota.

EU POSSO EXECUTAR "TELNET" EM UM COMPUTADOR REMOTO?

Para iniciar uma sessão interativa com um computador remoto, use o cmdlet Enter-PSSession.

No prompt do Windows PowerShell, digite:

        Enter-PSSession <ComputerName>

O prompt de comando muda para mostrar que você está conectado ao computador remoto.

        <ComputerName>\C:>

Agora os comandos digitados são executados no computador remoto, do mesmo modo como se eles fossem digitados diretamente no computador remoto.

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 ele fornece 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. Ou, você pode executar comandos remotos especificando uma sessão do Windows PowerShell (PSSession) que está conectada ao computador remoto.

Quando você usa o parâmetro ComputerName de Invoke-Command ou Enter-PSSession, o Windows PowerShell estabelece uma conexão temporária. O Windows PowerShell usa a conexão para executar apenas o comando atual e, em seguida, fecha a conexão. Esse é um método muito eficiente para executar um comando único ou vários comandos não relacionados, mesmo em vários computadores remotos.

Quando você usa o cmdlet New-PSSession para criar um PSSession, o Windows PowerShell estabelece uma conexão persistente com o PSSession. Em seguida, você pode executar vários comandos no PSSession, incluindo os comandos que compartilham dados. Insira o corpo da seção aqui.

Normalmente, você cria um 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 é 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ários PSSessions.

Quando você executa um comando Invoke-Command, o Windows PowerShell executa os comandos em todos os computadores especificados ou em todos os 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 deve ser limitado pelos recursos do seu computador e sua capacidade de estabelecer e manter várias conexões de rede.

Para obter mais informações, consulte o exemplo no tópico de ajuda Invoke-Command.

ONDE ESTÃO MEUS PERFIS?

Os perfis do Windows PowerShell não são executados automaticamente em sessões remotas para que os comandos que o perfil adiciona não estejam presentes na sessão. Além disso, a variável automática $profile não é preenchida 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 CurrentUserCurrentHost 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. Como a variável $profile não é preenchida, 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 são disponibilizados 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 perfis do Windows PowerShell, consulte about_Profiles. Para obter mais informações sobre configurações de sessão, consulte Register-PSSessionConfiguration.

COMO FUNCIONA O TRABALHO DE LIMITAÇÃO EM COMANDOS REMOTOS?

Para ajudá-lo a gerenciar os recursos no computador local, o Windows PowerShell inclui um recurso de limitação por comando que permite que você limite o número de conexões remotas simultâneas que são 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 de limitação personalizado para comandos específicos.

Ao usar o recurso de limitação, lembre-se de que ele é aplicado em cada comando, não em toda a sessão ou no computador. Se você estiver executando comandos simultaneamente em várias sessões ou PSSessions, o número de conexões simultâneas é a soma das conexões simultâneas em todas as sessões.

Para localizar cmdlets com um parâmetro ThrottleLimit, digite:

      Get-Help * -Parameter ThrottleLimit
      -or-
      Get-Command -ParameterName ThrottleLimit

A SAÍDA DE COMANDOS REMOTOS É DIFERENTE DA SAÍDA LOCAL?

Ao usar o Windows PowerShell localmente, você envia e recebe objetos do .NET Framework "dinâmicos". Objetos "dinâmicos" são aqueles que estão associados a programas reais ou componentes do sistema. Quando você invoca os métodos ou altera as propriedades de objetos dinâmicos, as alterações afetam o programa real ou componente. E, quando as propriedades de um programa ou componente são alteradas, as propriedades do objeto que as representam também são alteradas.

No entanto, como a maioria dos objetos dinâmicos não pode ser transmitida 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 (linguagem de restrição em 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 "dinâmico", ou seja, não está mais diretamente associado ao componente. E os métodos são removidos porque eles não são mais eficazes.

Normalmente, você pode usar objetos desserializados exatamente como usaria objetos dinâmicos, mas você deve estar atento a suas limitações. Além disso, os objetos que são retornados pelo cmdlet Invoke-Command têm propriedades adicionais que ajudam você a determinar a origem do comando.

Alguns tipos de objeto, como objetos DirectoryInfo e GUIDs, são convertidos novamente em objetos dinâmicos quando recebidos. Esses objetos não precisam de manipulação ou formatação especiais.

Para obter informações sobre como interpretar e formatar a saída remota, consulte about_Remote_Output.

É POSSÍVEL EXECUTAR TRABALHOS EM SEGUNDO PLANO REMOTAMENTE?

Sim. Um trabalho em segundo plano do Windows PowerShell é um comando Windows PowerShell que é executado de forma assíncrona sem interagir com a sessão. Quando você inicia um trabalho em segundo plano, o prompt de comando retorna imediatamente e você pode continuar a trabalhar na sessão enquanto o trabalho é executado, mesmo se ele for executado por um longo período de tempo.

Você pode iniciar um trabalho em segundo plano mesmo enquanto outros comandos estão em execução, pois os trabalhos em segundo plano sempre são executados de forma assíncrona em uma sessão temporária. Insira o corpo da seção aqui.

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. E 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, consulte about_Jobs e about_Remote_Jobs.

POSSO EXECUTAR PROGRAMAS DO WINDOWS EM UM COMPUTADOR REMOTO?

Você pode usar 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, você não pode usar os comandos do Windows PowerShell para abrir a interface do usuário para qualquer programa em um computador remoto.

Quando você inicia um programa do Windows em um computador remoto, o comando não é concluído e o prompt de comando do Windows PowerShell não retorna até que o programa seja concluído ou até que você pressione CTRL + C para interromper o comando. Por exemplo, se você executar o programa IpConfig em um computador remoto, o prompt de comando não retorna até que o IpConfig seja concluído.

Se você usar comandos remotos para iniciar um programa que tem uma interface de usuário, o processo de programa é iniciado, mas a interface do usuário não aparecerá. O comando do Windows PowerShell não é concluído e o prompt de comando não retorna até que você interrompa o processo do programa ou até que você pressione CTRL + C, que interrompe o comando e interrompe 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 é iniciado no computador remoto, mas a interface do usuário do Bloco de notas 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 NO MEU COMPUTADOR?

Sim. Cada sessão remota deve usar uma das configurações de sessão no computador remoto. Você pode gerenciar as configurações de sessão no seu computador (e as permissões para as configurações de sessão) para determinar quem pode executar comandos remotamente no computador e quais comandos podem executar.

Uma configuração de sessão configura o ambiente para a sessão. Você pode definir a configuração usando um assembly que implementa uma nova classe de configuração ou usando um script que é executado na sessão. A configuração pode determinar os comandos que estão disponíveis na sessão. E a configuração pode incluir configurações 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 configurações de sessão padrão em seu computador: Microsoft.PowerShell, Microsoft.PowerShell.Workflow e Microsoft.PowerShell32 (sistemas operacionais 64 bits apenas). Enable-PSRemoting define o descritor de segurança para a configuração para permitir que somente os membros do grupo Administradores no computador possam utilizar.

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.

A partir do Windows PowerShell 3.0, o cmdlet New-SessionConfigurationFile permite que você crie configurações de sessão personalizadas usando um arquivo de texto. O arquivo inclui opções para definir o modo de idioma e para especificar os cmdlets e os módulos que estão disponíveis em sessões que usam a configuração de sessão.

Quando os usuários utilizarem os cmdlets Invoke-Command, New-PSSession ou Enter-PSSession, eles podem usar o parâmetro ConfigurationName para indicar a configuração de sessão que é usada para a sessão. E, então, eles podem alterar a configuração padrão que suas sessões usam alterando o valor da variável de preferência $PSSessionConfigurationName na sessão.

Para obter mais informações sobre configurações de sessão, consulte a ajuda para 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? TÓPICO

O cenário remoto Windows PowerShell mais comum envolvendo vários computadores é a configuração de um-para-muitos, na qual um computador local (o computador do administrador) executa comandos do Windows PowerShell em vários computadores remotos. Isso é conhecido como cenário "fan-out".

No entanto, em algumas empresas, a configuração é muitos-para-um, em que vários computadores cliente se conectam a um único computador remoto que executa Windows PowerShell, como um servidor de arquivos ou um quiosque. Isso é conhecido como configuração "fan-in".

O Windows PowerShell com comunicação remota dá suporte a configurações de fan-out e fan-in.

Para a configuração de fan-out, o Windows PowerShell usa o protocolo WS-Management (Web Services for Management) e o serviço WinRM que dá suporte à implementação da Microsoft do WS-Management. Quando um computador local se conecta a um computador remoto, o WS-Management estabelece uma conexão e usa um plug-in para Windows PowerShell para iniciar 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 dar suporte à configuração "fan-in", o Windows PowerShell usa o IIS (Serviços de Informações da Internet) para hospedar o WS-Management, a fim de carregar o plug-in do Windows PowerShell e começar 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 do host.

Não há suporte para o gerenciamento remoto de hospedagem IIS e fan-in no Windows XP ou no Windows Server 2003.

Em uma configuração de fan-in, o usuário pode especificar um URI de conexão e um ponto de extremidade HTTP, incluindo o transporte, nome do computador, porta e nome do aplicativo. O IIS encaminha todas as solicitações com um nome de aplicativo especificado para o aplicativo. O padrão é o WS-Management, que pode hospedar Windows PowerShell.

Você também pode especificar um mecanismo de autenticação e proibir ou permitir redirecionamento de pontos de extremidade HTTP e HTTPS.

POSSO TESTAR A COMUNICAÇÃO REMOTA EM UM ÚNICO COMPUTADOR (NÃO EM UM DOMÍNIO)?

Sim. O Windows PowerShell com comunicação remota está disponível até mesmo quando o computador local não está 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 do mesmo modo que quando você se conecta a um computador remoto.

Para executar comandos remotos em um computador em um grupo de trabalho, altere as seguintes configurações do Windows no computador.

Cuidado: Essas configurações afetam todos os usuários no 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 as configurações de segurança local (Secpol.msc) para alterar a configuração da política "Acesso à rede: modelo de compartilhamento e segurança para contas locais", em Configurações de segurança\Políticas locais\Opções de segurança para "Clássico".

-- Windows Vista, Windows 7, Windows 8:

Crie a seguinte entrada de Registro e, em seguida, defina seu valor como 1: LocalAccountTokenFilterPolicy em HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

Você pode usar o seguinte comando do Windows PowerShell para adicionar esta entrada:

        New-ItemProperty `
        –Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System `
        –Name LocalAccountTokenFilterPolicy –propertyType DWord –Value 1

-- Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2012 R2:

Nenhuma alteração é necessária porque a configuração padrão da política "Acesso à rede: modelo de compartilhamento e segurança para contas locais" é "Clássico". Verifique se a configuração foi alterada.

POSSO EXECUTAR COMANDOS REMOTOS EM UM COMPUTADOR EM OUTRO DOMÍNIO?

Sim. Normalmente, os comandos são executados sem erros, embora talvez seja necessário usar o parâmetro de credencial dos cmdlets Invoke-Command, New-PSSession ou Enter-PSSession para fornecer as credenciais de um membro do grupo Administradores no computador remoto. Isso, às vezes, é necessário mesmo quando o usuário atual é membro do grupo Administradores nos computadores locais e remotos.

No entanto, se o computador remoto não estiver em um domínio que o computador local confia, o computador remoto não poderá 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 para o computador local em WinRM. Digite o comando no prompt do Windows PowerShell.

        Set-Item WSMan:\localhost\Client\TrustedHosts -Value <Remote-computer-name>

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

about_Remote_Variables

Invoke-Command

New-PSSession