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