6Sep
Uma das melhores características que o PowerShell oferece é a capacidade de gerenciar remotamente seus Servidores. Ele mesmo permite que você gerencie um monte de eles ao mesmo tempo.
Certifique-se de ler os artigos anteriores da série:
- Saiba como automatizar o Windows com o PowerShell
- Aprender a usar Cmdlets no PowerShell
- Como usar objetos no PowerShell
- Aprendendo formatação, filtragem e comparação no PowerShell
E fique atento aoO resto da série durante toda a semana.
O que é Remoting?
O gerenciamento em massa de seus servidores pode ser tedioso e, se você tiver que fazer uma alteração de configuração do IIS em 50 servidores da Web antes, você saberá o que quero dizer. Estes são os tipos de situações em que o PowerShell Remoting e as habilidades de script do idioma podem ser resgatadas. Usando o HTTP ou o HTTPS mais seguro, o PowerShell Remoting permite que você envie comandos para uma máquina remota em sua rede. A máquina executa os comandos e envia a saída de volta para você, que por sua vez é exibida na tela.
Vamos Obter Técnico
No núcleo do PowerShell Remoting encontra-se um único Serviço do Windows, o Gerenciamento Remoto do Windows ou o serviço WinRM, já que é conhecido. Usando o WinRM, você pode configurar uma ou mais configurações de sessão( também conhecidas como pontos finais), 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 podem ser executados, bem como o contexto de segurança em que a sessão deve ser executada. Usando o serviço WinRM, você também configura "ouvintes", que escutam os pedidos recebidos 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 se liga a um desses "ouvintes".Os "ouvintes" são então responsáveis pelo envio do 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 pelo "ouvinte" em toda a rede e volta para sua máquina.
Mostra-me como
A primeira coisa que você precisará fazer é habilitar Remoting na máquina à qual deseja se conectar. Isso pode ser feito executando o seguinte:
Habilitar-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.
- Ele cria um ouvinte HTTP que está vinculado a todas as suas placas de rede.
- 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 Pública, o PowerShell Remoting falhará.Para corrigi-lo, basta mudar para a localização da rede Home ou Work. Alternativamente, você pode ignorar a verificação de rede usando o seguinte:
Habilitar-PSRemoting -SkipNetworkProfileCheck
No entanto, recomendamos que altere sua localização de rede.
Existem duas maneiras de se conectar a outra máquina usando o PowerShell. Existe o método um a um, que é muito parecido com o uso de SSH, e então há o método um a muitos.
Usando uma sessão PowerShell
A primeira maneira de se conectar a uma máquina remota usando o PowerShell está usando algo chamado Sessão PowerShell. Basta colocar uma sessão que lhe permite executar comandos na máquina remota de forma interativa, da mesma forma que você faria na 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ê vier de um plano de fundo do Linux, você pode pensar em usar este método de remoting de um para um como a alternativa do PowerShell para o SSH.
Usando Invoke-Command
A segunda maneira de usar o PowerShell em uma máquina remota é usando Invoke-Command. A vantagem de usar 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{ Get-EventLog Application -Newest 2}
Uma vez que o comando é executado em paralelo em todas as máquinas, você precisará de alguma maneira para ver qual PC aveio o resultado dado. Você pode fazer isso observando a propriedade PSComputerName.
Quando você usa Invoke-Command, você não tem mais os objetos que você pode esperar no Pipeline. Você vê, para que o PowerShell obtenha as informações da máquina remota de volta para sua máquina, eles precisam de alguma maneira de representar os objetos que o comando que você executou nas saídas remotas da máquina. Hoje em dia, a maneira escolhida de 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 voltam para sua máquina, eles são deserializados de volta para um objeto;Aqui é que, quando são deserializados, todos os métodos, exceto o método ToString() , que o objeto tinha foram removidos.
Nota: Existem algumas exceções a esta regra, por exemplo, a maioria dos tipos primitivos, como números inteiros, podem ser deserializados com os métodos incluídos. Há também um processo chamado Rehydration, onde alguns métodos podem ser adicionados de volta aos objetos desserializados. Então, tenha cuidado e lembre-se de Get-Member é seu amigo.
Trabalho de casa
- Leia o Secrets of PowerShell Remoting ebook de Don Jones.