Pagina inicial » como » Geek School aprende a usar o Remoting no PowerShell

    Geek School aprende a usar o Remoting no PowerShell

    Um dos melhores recursos que o PowerShell oferece é a capacidade de gerenciar remotamente seus servidores. Ele ainda permite que você gerencie vários deles de uma vez também.

    Não deixe de ler os artigos anteriores da série:

    • Aprenda a automatizar o Windows com o PowerShell
    • Aprendendo a usar cmdlets no PowerShell
    • Aprendendo como usar objetos no PowerShell
    • Aprendendo a formatar, filtrar e comparar no PowerShell

    E fique ligado para o resto da série durante toda a semana.

    O que é remoting?

    O gerenciamento em massa de seus servidores pode ser entediante e, se você tiver que fazer uma alteração na configuração do IIS em 50 servidores da web antes, saberá o que quero dizer. Esses são os tipos de situações em que o PowerShell Remoting e as habilidades de script da linguagem podem ser resgatados. Usando HTTP ou HTTPS mais seguro, o PowerShell Remoting permite enviar comandos para uma máquina remota em sua rede. A máquina então executa os comandos e envia a saída de volta para você, que por sua vez é exibida na tela.

    Vamos nos tornar técnicos

    No núcleo do PowerShell Remoting está um único serviço do Windows, o Windows Remote Management ou o serviço WinRM, como se tornou conhecido. Usando o WinRM, você pode configurar uma ou mais configurações de sessão (também conhecidas como pontos de extremidade), que são basicamente arquivos que contêm informações sobre a experiência que você deseja fornecer à pessoa que se conecta à sua instância remota do PowerShell. Mais especificamente, você pode usar arquivos de configuração de sessão para definir quem pode e quem não pode se conectar à instância, quais cmdlets e scripts eles podem executar, bem como em qual contexto de segurança a sessão deve ser executada. Usando o serviço WinRM, você também configura os “ouvintes”, que escutam solicitações de entrada do PowerShell. Esses “ouvintes” podem ser HTTP ou HTTPS e podem ser vinculados a um único endereço IP em sua máquina. Quando você abre uma conexão do PowerShell para outra máquina (tecnicamente isso é feito usando o protocolo WS-MAN, que é baseado em HTTP), a conexão é vinculada a um desses “ouvintes”. Os “ouvintes” são responsáveis ​​por enviar o tráfego para o aplicativo associado ao arquivo de configuração de sessão apropriado; o aplicativo (normalmente o PowerShell, mas você pode ter outros aplicativos de hospedagem, se desejar), em seguida, executa o comando e alimenta os resultados de volta através do "ouvinte" pela rede e de volta à sua máquina.

    Mostre-me como

    A primeira coisa que você precisa fazer é ativar o Remoting na máquina à qual deseja se conectar. Isso pode ser feito executando o seguinte:

    Ativar-PSRemoting

    Você precisará responder sim a todos os prompts. Quando você executa o Enable-PSRemoting, algumas alterações são feitas no seu PC:

    • O serviço WinRM é iniciado.
    • O serviço WinRM muda do modo de inicialização manual para Automático.
    • Cria um ouvinte HTTP vinculado a todas as suas placas de rede.
    • Ele também cria uma exceção de firewall de entrada para o protocolo WS-MAN.
    • Algumas configurações de sessão padrão são criadas

    Se você estiver executando o Windows 7 e a localização da sua placa de rede estiver definida como Public, a ativação do PowerShell Remoting falhará. Para consertá-lo, simplesmente mude para o local da rede Casa ou Trabalho. Alternativamente, você pode pular a verificação de rede usando o seguinte:

    Ativar-PSRemoting -SkipNetworkProfileCheck

    No entanto, recomendamos que você altere seu local de rede.

    Existem duas maneiras de se conectar a outra máquina usando o PowerShell. Existe o método de um para um, que é muito semelhante ao uso de SSH, e depois há o método de muitos.

    Usando uma sessão do PowerShell

    A primeira maneira de se conectar a uma máquina remota usando o PowerShell é usar algo chamado de sessão do PowerShell. Basta colocar uma sessão para executar comandos na máquina remota de maneira interativa, da mesma forma que você faria em sua própria máquina. Para abrir uma sessão, basta digitar o seguinte:

    Enter-PSSession -ComputerName "Darlah"

    O prompt ganhará um prefixo que significa a máquina na qual você está executando os cmdlets.

    A partir daqui, você pode realmente tratar o prompt como se estivesse sentado na máquina remota. Por exemplo, se você quiser ver todos os arquivos na unidade C: \, você pode fazer um simples:

    Get-ChildItem -Path C: \

    Se você vem de um ambiente Linux, você pode pensar em usar este método de remoting como a alternativa do PowerShell ao SSH.

    Usando Invoke-Command

    A segunda maneira de usar o PowerShell em uma máquina remota é usando Invoke-Command. A vantagem de usar o Invoke-Command vem do fato de que você pode executar o mesmo comando em várias máquinas simultaneamente. Como você pode imaginar, isso é particularmente útil quando você quer fazer algo como reunir logs de eventos de seus servidores. Invoke-Command segue a seguinte sintaxe:

    Invoke-Command -ComputerName Darlah, localhost -ScriptBlock Aplicativo Get-EventLog - mais recente 2

    Como o comando é executado em paralelo em todas as máquinas, você precisará de alguma maneira de ver de qual PC um dado resultado veio. Você pode fazer isso, observando a propriedade PSComputerName.

    Quando você usa Invoke-Command, não tem mais os objetos que poderia esperar no Pipeline. Você vê, para que o PowerShell obtenha as informações da máquina remota de volta à sua máquina, elas precisam de alguma forma de representar os objetos que o comando que você executou nas saídas da máquina remota. Atualmente, parece que a maneira escolhida para representar uma estrutura de dados hierárquica é usar XML, o que significa que quando você emite um comando usando Invoke-Command, os resultados são primeiro serializados em XML antes de serem enviados de volta para sua máquina. Uma vez que eles voltem para sua máquina, eles são desserializados de volta para um objeto; a pegadinha aqui é que quando eles são desserializados, todos os métodos, exceto o método ToString (), que o objeto tinha são retirados dele.

    Nota: Existem algumas exceções a essa regra, por exemplo, a maioria dos tipos primitivos como inteiros podem ser desserializados com seus métodos incluídos. Existe também um processo chamado Rehydration, onde alguns métodos podem ser adicionados de volta a objetos desserializados. Então apenas tenha cuidado e lembre-se Get-Member é seu amigo.

    Dever de casa

    • Leia os segredos do PowerShell Remoting ebook by Don Jones.