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 a 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 é o 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 do idioma 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 receber técnico
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 os arquivos de configuração da 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 as 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 retorna os resultados pelo "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:
Enable-PSRemoting
- O serviço WinRM é iniciado.
- O serviço WinRM muda do modo de inicialização manual para automático.
- Ele 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 Pública, a ativação do Remoto do PowerShell falhará. Para consertá-lo, simplesmente mude para o local da rede Casa ou Trabalho. Como alternativa, você pode pular a verificação de rede usando o seguinte:
Enable-PSRemoting –SkipNetworkProfileCheck
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á um método para 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 que você possa executar comandos na máquina remota de maneira interativa da mesma maneira que faria em sua própria máquina. Para abrir uma sessão, basta digitar o seguinte:
Enter-PSSession –ComputerName “Darlah”
Get-ChildItem –Path C:
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 {Get-EventLog Application -Newest 2}
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. Portanto, apenas tenha cuidado e lembre-se Get-Member é seu amigo.