Concrete Logo
Hamburger button

Introdução ao Powershell

  • Blog
  • 8 de Maio de 2017
Share

Esse aí é o Powershell, pra quem nunca viu =)

Esse é o post que dá início a uma pequena série que aborda o Powershell e seu ecossistema. Mais à frente vou aprofundar seus módulos, funcionalidades e dar alguns exemplos reais. Por hora, somente um overview. Esse post tem diversos links! Recomendo que os acesse ao longo da leitura para melhor entendimento. Inclusive acho que você já deixou passar um que está escondido ali em cima :). A série será dividida em quatro módulos.

Este post compreende o primeiro “módulo”, uma introdução à ferramenta numa forma mais “leve” e com um pouco de história embutida. Os outros três módulos descrevem mais profundamente como escrever código em Powershell. A ordem segue uma metodologia que normalmente uso ao codificar soluções/ferramenta, seja em Powershell ou em qualquer outra linguagem. A leitura é densa, mas procurei deixar tudo bem demonstrado e explicado para que você possa aproveitar ao máximo o passeio.

Pega aí um suco de melancia e aproveite!

Para aqueles que já têm alguma (mesmo que breve) experiência em Powershell ou na plataforma .NET, ler separadamente os módulos é uma opção palpável. Cada um deles abrange o seu “nicho”, e somente ele! Ainda assim, recomendo que leia todo este módulo acessando os links ao decorrer de sua leitura, dessa forma o entendimento será mais claro para quem nunca teve contato e deixará mais fortes as bases de quem já conhece o Framework.

Também gosto de distribuir alguns “easter eggs” pelo caminho, assim a experiência de leitura fica mais divertida.

Primeiro, um pequeno trecho de história. O que seria de um Ferreiro lvl 13 (Str 12; Sta 6; Int 10; Res 9; Cha 12; Wis 10; Wil 5; Ft 7) se ele não contasse as histórias de suas Quests e experiências além das magias que aprendeu a realizar com Powershell desde muitas luas atrás?

Por “um pouco de história”, gostaria de mostrar brevemente o que senti ao ter contato com Powershell, o porquê este desempenhou uma função importante em minha carreira e o que ele pode fazer por você.

Sem dúvida, Powershell é hoje minha escolha clara para resolver quaisquer problemas que eu encontro pelo caminho (ando tendo um affair com Python, mas é recente). Mas por quê? Bom… o Powershell é uma linguagem extremamente flexível, inteligível e modular, sem deixar de ser simples e rápida/leve. Sem dúvida, é uma das ferramentas mais fortes que a filha do titio Gates (Binomial Microsoft CORP ou Master Race {o choro é livre}) criou até hoje e uma das que mais cresceu desde seu lançamento.

Agora que você já conhece o Powershell, vamos chamá-lo carinhosamente pelo seu nick Posh ou pela sigla PS, que na definição do Wikipedia pode ser “o script que você escreve depois” {Post scriptum}, “PostScript”, “o código TLD (ccTLD) na Internet para a Palestina” ou o objeto favorito do Yudi.

Voltada para a montagem de scripts poderosos e com os recursos da plataforma .NET, ainda permite que o desenvolvedor entregue rapidamente soluções complexas com poucas linhas de código, inclusive aquelas que necessitem resolver paradigmas de orientação. Abaixo um exemplo CtrlJ de “classe simples”.

Todo e qualquer procedimento, função e aproach feito em Powershell segue padrões de nomenclatura (titio Gates e seus padrões…) e parametrização descritos aqui. Funciona basicamente assim: Você precisa de uma função que copia um item? O nome dela é simples: Copy-Item. Quer uma que apague um item? : Remove-Item. Quer uma que importe um arquivo CSV? Import-CSV… E assim vai. Essa estrutura “Verb-Noun” faz com que qualquer pessoa, até mesmo as com conhecimento muito breve em programação, esteja prontamente apta a interpretar um código/script escrito em Posh e compreenda facilmente o que ele faz.

A comunidade segue fortemente esses conceitos, então temos um crescimento muito sólido e controlado.

Lembra daquela pesquisa no ss64 sobre qual o significado/função do comando Lorem_ipsum? Lembra aquela dúvida na sequência dos atributos? Se é com hífen simples ou duplo, se é maiúsculo ou minúsculo, se está na ordem ou combinação correta?

Ou chamadas de funções escritas desta forma: :(){:|:&};:

… Lembra aquela vez que você executou um comando e ele fez uma coisa que você NÃO queria, erro justamente causado por uma ou a combinação das dúvidas listadas acima?

… Aqui não!… leia o comando e saberá o que ele faz!

Isso faz com que a curva de aprendizado em Posh seja muito acelerada! Rapidamente o jovem guerreiro viking está apto a desfrutar as batalhas acompanhado de seu fiel machado. Digo… Rapidamente o desenvolvedor consegue aproveitar amplamente as funcionalidades e facilidades que o Powershell pode entregar.

Com uma base sólida nas libs .NET, o Posh vem ao ecossistema MS para ser a ferramenta base para automação e gestão de configuração da plataforma Microsoft.

Notou algum ressalte ao nosso mundo de DevOps no texto acima?

Pois é, o Posh é um framework para automação de tarefas e gerenciamento de configuração, que fornece total controle aos COM, WMI e CIMs para os Linux Peasants.

Uma diferença legal entre o Posh e as demais “command-line interfaces” é que ele foi feito para manusear objetos. Toda informação é um encapsulamento de propriedades/métodos/etc. que você pode usar, praticamente nunca é somente texto sendo exibido na tela.

Temos também o recente DSC para realizar o “Desired State Configuration”, com forte base nas estruturas Script Module, Binary Module e Module Manifest. Ainda temos notórias contribuições da comunidade Posh-Ssh e um amplo material disponível numa linguagem fácil de entender e escrita de forma muito amigável techNet pelo meu querido Ed.

Como o Powershell é uma linguagem extremamente bem descrita, fica muito fácil encontrar ajuda em sites especializados Copy-Item, com exemplos de todos os casos de uso, e em uma comunidade forte Developer Network. Esses meios nunca deixaram de sanar qualquer dúvida que tive até hoje, e olha que já foram muitas.

Pouco tempo atrás o Posh se tornou multiplataforma e Open Source (Ago/2016) e junto a isso parcerias entre a Microsoft e a RedHat.

 Windows Love Linux

Para trabalhar com Powershell, basicamente o que você precisa ter é seu Windows atualizado (ou Linux), pois todas suas dependências já estão nativas no SO. Você vai se deparar com a ISE ou com a Console. Caso tenha curiosidade, esses são os system-requirements.

Eventualmente também gosto de usar o Visual Studio Code para meus scripts, porém sempre prefiro trabalhar com ferramentas nativas e sem dependências (não gosto de depender/baixar/configurar alguma coisa para poder trabalhar, isso tem muito a ver com agilidade), por isso me mantenho só na ISE e Console. Até porque elas sinceramente funcionam muito bem. A Intellisense é rápida, clara e não há inconsistências de funcionamento. Importar (e criar) módulos é bem fácil (te dou 5 segundos para pensar qual será o conjunto de “Verb-Noun” que IMPORTA um MÓDULO no Powershell – e aposto o último pedaço da pizza que você acerta).

Por fim, após editar um script na ISE, sua execução e depuração é bem rápida e facilitada.

Aqui termina o “um pouco de história”, vamos sujar um pouco as mãos!

Vamos seguir agora a metodologia que citei láááá em cima. Existem “dois grandes mundos” em que o Posh ajuda muito: o primeiro é como uma ferramenta para a gestão de seu sistema e o segundo é como uma ferramenta de automação. Vamos falar um pouco aqui sobre esse segundo ponto.

Pense numa POC de automação. Digamos que após um deployment eu precise atestar uma funcionalidade básica da aplicação que acabou de ser instalada, então vamos supor que eu precise somente abrir uma página web e logar na aplicação.

Vamos lá.

A primeira coisa a se pensar é o caminho “straightforward” ou “direto” dessa execução. Então digamos um script que crie um COM do Explorer, navegue até a página “X”, identifique os objetos de login e senha, complete-os e aperte o botão “login”. Esse Script é descrito no Módulo 1 – Script. Nele, vamos descrever brevemente a sintaxe do Powershell, seu set-up e realizar a POC que citei acima.

A segunda coisa é fazer com que esse código seja mais reutilizável, então deixaremos de ter um script “travado” que só execute aquilo para ter um conjunto de funções que eu possa chamar a meu bel sabor. Isso será abordado no Módulo 2 –  Funções.

A terceira ação é modularizar nosso código, transformando-o em um “powershell module”, para atingirmos uma maior escalabilidade, controle, abstração e aumentar ainda mais o reúso de nosso código: Módulo 3 – Módulos. Até aqui tem alguma dúvida ou alguma observação? Aproveite os campos abaixo!

Curte a cultura DevOps e quer fazer parte de um time ágil e multidisciplinar? Vem pra cá!