Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais
Alura > Cursos de DevOps > Cursos de Windows > Conteúdos de Windows > Primeiras aulas do curso PowerShell parte 2: Sessões, Jobs e Administração Remota

PowerShell parte 2: Sessões, Jobs e Administração Remota

dotNet no PowerShell - Introdução

E aí galera, beleza! Meu nome é Guilherme e nessa segunda parte do nosso curso de PowerShell a gente vai aprofundar muito mais o que a gente viu na primeira parte, por isso se você ainda não fez a parte 1 recomendo fortemente que você o faça.

Porque a gente vai aprofundar muito nos conceitos de Pipeline que a gente viu na parte 1, a gente vai revisitar cmdlets que nós vimos na parte 1 e a gente vai aprender com mais detalhes como eles funcionam.

E a gente vai fazer isso porque aqui no banco Bytebank a gente vai lidar com muitos desafios, a gente vai precisar fazer a manutenção em vários servidores remotamente. Eu não vou ficar acessando servidor por servidor pra fazer uma manutenção com conexão remota, eu vou usar o PowerShell, eu vou fazer isso de forma muito rápida porque a gente vai aprender a usar os Jobs a nosso favor.

E fazer manutenção em vários servidores ao mesmo tempo. A gente vai aprender conceitos de sessões no PowerShell que é um conceito mais avançado ainda. E a gente vai aprender também que não dá para ficar escrevendo código no Notepad++.

A gente vai usar o Visual Studio Code. E no Visual Studio Code nós vamos configurar ele para a gente conseguir rodar o nosso script de forma automática. E a gente vai escrever funções, funções com mesmo comportamento dos cmdlets que nós vimos e funções complexas. A gente vai lidar com Pipeline a gente vai definir o que é um atributo obrigatório.

E a gente vai fazer até manutenção em servidores quando as nossas tarefas não dão suporte para o PowerShell. A gente vai usar o PowerShell para fazer a manutenção do IIS, e a gente vai fazer essa manutenção usando um programa que ele não é feito pro PowerShell.

A gente vai passar por muita coisa aqui, a gente vai aprender a usar com mais robustez o .NET no PowerShell e por meio dessa jornada a gente vai ver muita coisinha do PowerShell.

A gente vai aprender com detalhes como são os Jobs, a gente vai aprender alguns formatadores do PowerShell para facilitar a minha visão interativa com a console do PowerShell.

E a gente vai ver também alguns formatadores que eles criam, inclusive uma interface gráfica para gente. Então, pessoal esse curso é muito importante para quem é administrador de sistemas e não apenas para administradores como também é importante pra desenvolvedores, para você administrar seu ambiente e você ter uma maior produtividade na sua máquina.

Então pessoal, esse é um curso bastante denso, a gente vai aprender muita coisa, mas vamos lá porque isso é muito importante.

dotNet no PowerShell - Adotando uma ISE

Fala, galera da Alura, beleza! Vamos continuar nossos estudos de PowerShell agora nessa segunda parte do curso. Então pessoal, retomando a primeira parte do curso nós continuamos sendo administrador de sistemas no banco Bytebank. E a gente ainda continua com a tarefa de fazer a migração daqueles scripts legados .BAT dos anos 90 pro PowerShell.

Pra ajudar essa tarefa, a gente até criou aquela convenção de pegar um script antigo mudar o nome dele, para colocar o nosso nome, para indicar que a gente já tá migrando ele, e nós chegamos a criar inclusive um script em PowerShell, que gera relatórios para mostrar quem tá migrando o que.

Vamos dar uma olhada nisso? Então eu tenho aqui no PowerShell, já estou no meu diretório de scripts, e a gente criou o script chamado "ScriptsEmMigracao", e como argumento para esse script a gente passa que tipo de produto nós queremos.

Então se eu digito HTML o que o nosso script vai fazer é gerar uma página web com informações de quem está migrando o que. Então a página que a gente tem como resultado é essa daqui, um relatório de scripts em migração.

E a gente ficou ainda com a tarefa de fazer a migração desses arquivos de cálculo de hash. Vamos começar a fazer a conversão deles? Mas nós tivemos algumas reuniões aqui no Bytebank, e o pessoal, nosso time, tá cada vez mais engajado no PowerShell e mais engajado em fazer as coisas no estilo do PowerShell.

Então chamar um script, invocar um script pelo seu nome e passar os argumentos para um script .PS1 não é tão PowerShell style. Nós temos esses scripts de cálculo de hash e concordamos com o time que isso não vai ser um script de hash separado. Então, vamos deixar de ter essa bagunça aqui, um arquivo pra cada tarefinha.

Nós vamos criar cmdlets que fazem esse cálculo de hash de arquivo. Então se antes nós tínhamos vários arquivos separados, agora nós vamos ter quatro cmdlets nós vamos ter o Get-FileSHA1, o Get-FileSHA256, o Get-FileSHA384 e nós vamos ter o cmdlet GET-FileSHA512.

Então, vamos começar a escrever isso. Eu vou abrir aqui o nosso bloco de notas, nosso Notepad++ e poxa, pessoal, isso daqui parece bem mais complexo do que o nosso script anterior, o script em migração. E aqui como a gente estava desenvolvendo esse script?

Bom, eu salvava aqui, dava um Ctrl+S porque eu tentava ser mais ágil, aí eu vinha aqui, no PowerShell na minha console, aí primeiro eu tinha que navegar para o diretório, aqui eu já naveguei, mas depois que eu naveguei eu vim aqui "ScriptsEmMigracao.PS1", aí se eu estou testando por exemplo HTML, eu digito HTML, se eu estou testando CSV, escreve CSV, e aí eu fico nesse fluxo, eu dou um Enter, putz, esqueci de salvar lá no bloco de notas, eu volto aqui clico no disquete.

Pessoal, não tá nada integrado com isso. Que tal a gente utilizar uma IDE, ou melhor ainda, uma ISE. IDE é um acrônimo de Integrated Development Environment, muito semelhante a gente tem o acrônimo ISE, a diferença entre esses dois é aqui no Development, o S vem de scripting, pra gente lembrar que PowerShell, não é exatamente uma linguagem de programação é uma linguagem de script.

Se você digitou na sua máquina, aqui na busca do Windows, PowerShell, muito provavelmente você percebeu que a gente tem um Windows PowerShell ISE já instalado, ele vem por padrão no Windows.

Isso é muito bom para gente, por que não vem apenas por padrão em Windows de usuário, ou seja, esse Windows 10 que eu estou utilizando. Ele vem disponível também nas versões de servidor do PowerShell. Então eu tô aqui abrindo uma versão de servidor do PowerShell, eu tô abrindo o Windows Server 2012.

Que não é nem a versão mais recente do Windows servidor, e se eu digito aqui na busca, PowerShell eu vou perceber que até na versão de servidor do Windows eu tenho disponível o PowerShell ISE.

Isso é importante porque muitas vezes a gente está numa empresa que ela tem uma super preocupação com termos, condições e contratos de software. E se a empresa já adota o Windows ela automaticamente está adotando o PowerShell e automaticamente a gente já tem disponível o PowerShell ISE, inclusive nos servidores.

E esse cara aqui, é importante a gente saber que ele existe, mas nesse curso a gente vai usar uma opção mais moderna. A gente vai usar para desenvolver nossos scripts o Visual Studio Code.

O Visual Studio Code ele tem algumas características interessantes, ainda mais se tratando de PowerShell. O PowerShell a partir da versão 6, ele é cross-platform, ou seja, ele vai funcionar tanto no nosso Windows, quanto no Linux, ou no Mac, o PowerShell 6, ele já é cross-platform ele já roda nessas plataformas. O Visual Studio Code que é um ambiente de desenvolvimento também, ele funciona no Mac, no Linux, enquanto que o PowerShell ISE, não.

Mas o Visual Studio Code ele traz alguns problemas, que nem sempre vai ser o melhor uso para o nosso caso, como por exemplo baixar o Visual Studio Code implica na minha corporação que, eu estou aceitando seus termos e condições, eu estou tendo cuidado com seu licenciamento.

Na verdade ele é free, mas eu estou tendo o cuidado de ler e aceitar isso na minha Corporação e às vezes isso é um processo um pouco burocrático. Nesses casos a gente sempre vai ter disponível o PowerShell ISE. Mas se nós temos a liberdade vamos usar o Visual Studio Code que é uma opção bem mais moderna.

Então, aqui e a gente vai acompanhar o textinho de como configurar o ambiente, e a gente vai instalar o Visual Studio Code, e vai colocar a extensão do PowerShell no Visual Studio Code. Feito isso, a gente continua nosso curso e vamos colocar a mão na massa para escrever esses vários cmdlets.

dotNet no PowerShell - Usando objetos e classes dotNet

Antes de começar esse meu script para fazer a conversão de um arquivo pro hash. Para gente fazer o cálculo do hash, eu escrevi um pequeno procedimento para gente seguir.

Então pra eu fazer o cálculo do hash, o primeiro passo é obter o conteúdo do meu arquivo. A gente conheceu o cmdlet Get-Content que já faz isso pra gente. Só que para fazer o cálculo de hash eu preciso disso em bytes. Bom, isso parece um pequeno desafio, mas não parece nada muito complexo.

Beleza, feito isso eu preciso fazer a computação do hash a partir desses bytes, computei o hash, aí eu vou escrever na tela, e o que eu vou obter no final, é algo exatamente nesse formato, isso daqui pessoal, são vários números inteiros concatenados no formato hexadecimal.

Então, eu tenho um número decimal só que ao invés de escrever ele na notação decimal eu vou converter para formato de hexadecimal, e sendo hexadecimal eu vou ter uma string nesse formato aqui.

Aqui, eu peguei, como exemplo, o hash SHA-1 do Windows 7 Home Premium. Então eu olhei de novo a listinha de procedimento que a gente vai seguir eu me deparei com esses desafios, o primeiro deles que não parece tão complexo que é fazer a conversão para bytes, de um texto, e fazer o ato de computar o hash.

Pessoal, eu não faço a menor ideia de como se computa um hash. Eu não sou programador, eu sou administrador de sistemas, mas mesmo assim eu entrei lá no Google eu fiz uma pesquisa e aí eu descobri como se computa o hash, é só seguir essa imagem aqui, parece fácil, né?

Não pessoal, será que eu preciso criar esse script clássico no PowerShell? Ainda lembrando que o PowerShell não é uma linguagem de programação, é uma linguagem de script, então ele não foi feito para a gente escrever código desse nível de complexidade no PowerShell. Ele foi feito para escrever scripts e diante disso pessoal eu fiz a mesma cara que vocês devem estar fazendo agora, e diante do meu desespero um colega desenvolvedor .NET me lembrou de algumas coisinhas.

A primeira delas é que PowerShell é orientado a objetos, a outra coisa é que o PowerShell é baseado em .NET, ou seja, ele foi construído em cima do .NET. E aí o cheguei para esse meu colega e comentei, "Será que não tem uma classe, ou um objeto, que já faça esse cálculo de hash para mim?", então ele lembrou: "Sim! A gente tem a classe SHA1Managed que ele vai fazer o cálculo do hash a partir dos bytes que você der para ele".

E a gente tem a propriedade estática "Encoding.UTF8", que vai fazer a conversão de texto para os bytes. Se classe e propriedade estática parece um pouco grego para você eu sugiro fortemente que você faça um curso aqui na Alura de orientação a objetos com C#.

Esse curso ele vai agregar bastante como administradores e quem lida com PowerShell, não apenas porque a gente vai aprender C#, mas porque a gente vai aprender um pouco sobre .NET, e a gente vai aprender os conceitos de orientação a objetos que a gente vai usar bastante no PowerShell se a gente se aprofundar cada vez mais nele.

Então, vamos começar a escrever o nosso script, eu tô com o Visual Studio Code aberto, eu vou criar um novo arquivo e vou chamar ele de ShaHashCode, ou melhor eu vou chamar de ShaFile e eu vou usar a extensão PS1, porque eu tô falando de um script PowerShell e o Visual Studio Code, ele já coloca o íconezinho do PowerShell.

Então, como a gente definiu nas reuniões o nome dos nossos CMDLET eles vão ser Get-FileSHA1, a gente vai ter o SHA256, a gente vai ter o SHA384, e vamos ter também o 512.

Para criar um CMDLET dentro de um script eu tenho uma, notação muito semelhante com várias linguagens de programação que é usar uma palavra reservada, function, e depois do nome da minha função que no PowerShell é um CMDLET eu passo uma lista de parâmetros e no fim eu tenho um bloco onde eu vou escrever o código.

Então, eu vou fazer isso com esses outros, com os outros nomes também então, function, e passar a lista parâmetros e passar o bloco de script. fiz aqui o corpo e a lista de parâmetros para todos eles.

Vamos lembrar o que a gente precisa. A gente vai precisar receber o arquivo, então a gente vai receber o nome, e o endereço completo de onde esse arquivo está. Então eu vou criar uma variável aqui dentro, já que a gente vai começar pelo Get-FileSHA1, eu vou colocar como parâmetro o file, vamos escrever em minúsculo, eu vou obter como parâmetro o filePath

E a partir do filePath eu vou poder obter o seu conteúdo, então eu vou criar uma nova variável conteúdo, eu vou chamar de fileContent. Vai ser aquele CMDLET que a gente já conhece, Get-Content, e como parâmetro eu vou passar para ele o filePath.

Segunda tarefa, converter esse conteúdo pra bytes, vamos lembrar que nosso amigo .NET, falou que a gente pode usar o Encoding.UTF-8. Lembrando que ele é um membro estático. No PowerShell pra usar um membro estático do .NET eu tenho uma sintaxe bem simples.

Então eu vou primeiro criar a minha variável, vai ser fileBytes, e se eu quero usar um membro estático, eu coloco entre colchetes, qual é o tipo, o nome do meu tipo, e em seguida eu digo qual é o membro que eu quero acessar.

Bom, o tipo é o Encoding, eu estou no Visual Studio Code, eu escrevi Encoding, ele deu essa sugestão para mim, eu vou dar um Enter, e ele vai auto-completar o namespace, dessa classe aqui.

E a gente sempre precisa do nome inteiro do objeto. E aqui que eu já tenho entre colchetes qual classe a gente está usando um membro estático, eu coloco duas vezes, dois pontos, e agora eu tenho disponível os seus objetos suas propriedades e seus membros.

E aqui eu vou usar o UTF8, e o UTF8, ele possui um método chamado GetBytes, e ele vai receber por parâmetro o texto que eu quero obter os bytes. E o texto a gente já possui lá em cima, é o fileContent. Agora nós temos o arquivo, nós temos os bytes desse arquivo, agora a gente precisa instanciar aquela classe que nosso colega .NET falou, que já possui implementado os métodos para se computar o hash.

Então, para criar uma nova instância de uma classe no PowerShell, a gente tem um CMDLET chamado, New-Object, que faz o que a gente precisa, criar um novo objeto. Então eu vou chamar esse cara de SHA1, vou guardar nessa variável SHA1, e eu vou chamar então esse CMDLET, New-Object. E o Visual Studio Code já auto completa pra gente, porque a gente tem um parâmetro chamado TypeName. O TypeName ele também vai ser o nome inteiro, então a gente também vai incluir o namespace nesse nome.

Vamos lembrar, que o objeto, a classe, que o nosso amigo .NET sugeriu foi esse SHA1Managed, então já vou usar esse cara aqui. O Visual Studio Code ele já auto completa o namespace para gente, facilita muito nosso trabalho.

Então, se eu já tenho os bytes, se eu já tenho o objeto, a classe que vai fazer essa computação para gente, falta apenas passar os bytes para esse objeto de computação de hash. Então vou usar aqui o método ComputeHash da minha classe .NET SHA1.

Eu vou passar por parâmetro os bytes do meu arquivo fileBytes. Eu vou guardar isso dentro de outra variável, eu vou guardar isso dentro de hash. E agora pessoal, eu vou escrever na tela, eu vou escrever na tela qual é o hash desse arquivo.

E a gente espera o que? A gente espera ter uma saída muito semelhante com esse daqui, do Windows 7. Uma saída nesse formato. Então eu vou escrever na tela. Vamos lembrar que a tela do PowerShell é o host, é quem hospeda a Engine de execução do PowerShell. Então se eu quero escrever na tela, que é o nosso host, eu posso usar o CMDLET Write-Host.

Legal, e eu vou escrever na tela o nosso resultado de hash. E pessoal, o Write-Host ele é interessante porque ele nos dá algumas opções, como mudar a cor. Se eu quero escrever colorido, eu posso escrever, se eu quiser mudar a cor do fundo para vermelho, eu posso, se eu quero mudar a cor do texto para amarelo, eu posso, então eu tenho como argumentos aqui o BackgroundColor e o ForegroundColor.

Como background eu vou usar o vermelho, então eu vou escrever aqui, Red, e como foreground a cor do meu texto, eu vou usar o amarelo, só para a gente ter uma visualização mais interessante.

Então, eu vou salvar meu Script, e eu vou dar um F5 aqui no Visual Studio Code, dei o F5 e aparentemente, nada aconteceu. Nada aconteceu porque eu só tô declarando funções, eu não estou chamando nenhuma função, e eu não estou executando nada de fato.

Se eu escrevo aqui no meu terminal do PowerShell, Get-FileSHA1, que é uma função que a gente declarou aqui no nosso script, e der um Enter, ele vai ser executado. Aqui no caso, a gente teve alguns erros, porque a gente não passou o argumento do arquivo que a gente vai fazer o cálculo do hash.

Então eu vou, para ser mais fácil, eu vou pegar esse próprio script e eu vou calcular o hash dele. Então eu vou usar o Copy Path, eu vou colar aqui, e para não precisar ficar usando o terminal a todo momento, eu vou chamar o Get-FileSHA1 logo depois de declarar, e eu vou passar ele pra esse arquivo aqui, que é o próprio arquivo de script.

Vou salvar, vou dar um F5. A gente já teve a nossa saída aqui, então muito facilmente a gente criou a classe que faz a computação do hash, e a gente obteve os bytes do nosso arquivo e a gente escreveu na tela o hash.

Mas pessoal, isso daqui tá num formato bem diferente do formato padrão, então a gente precisa imprimir nesse formato padrão de hash de arquivo. Aquele formato que a gente viu, nada mais é que todos esses números aqui escritos em hexadecimal e concatenados. Vamos fazer isso?

Sobre o curso PowerShell parte 2: Sessões, Jobs e Administração Remota

O curso PowerShell parte 2: Sessões, Jobs e Administração Remota possui 264 minutos de vídeos, em um total de 50 atividades. Gostou? Conheça nossos outros cursos de Windows em DevOps, ou leia nossos artigos de DevOps.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Windows acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas