DevSecOps

29 mai, 2017

Introdução ao Powershell – Módulo 02: Funções

Publicidade

No artigo anterior falamos sobre Scripts. Veja aqui o conteúdo. Vamos seguir hoje, falando sobre Funções.

Digamos que você se depara com o seguinte script:

    $ie = New-Object -ComObject InternetExplorer.Application
    $ie.Visible = $True

    $ie.Navigate('https://github.com/login')

    While($ie.Busy -eq $True){
        Start-Sleep -Milliseconds 100
    }

    ($ie.Document.getElementsByName("login") | Select-Object -Unique).Value = "otto.gori@concrete.com.br"

    ($ie.Document.getElementsByName("commit") | Select-Object -Unique).Click()

    While($ie.Busy -eq $True){
        Start-Sleep -Milliseconds 100
    }

    $monitor =  [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize

    $bounds = [Drawing.Rectangle]::FromLTRB(0, 0, $monitor.Width, $monitor.Height)

    $bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height

    $graphics = [Drawing.Graphics]::FromImage($bmp)

    $graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)

    $bmp.Save("$HOME\print.png")

    $graphics.Dispose()
    $bmp.Dispose()

    Invoke-Item "$HOME\print.png"

    $ie.Quit()

Notoriamente há o que melhorar, certo? Vamos então listar os pontos de melhoria para guiar nosso “code refactor”:

1. Há trechos de chamadas repetidas, que podem ser transformados em funções.
2. Esse script executa SOMENTE isso, não há reutilização para nenhum dos pedaços contidos nele.
3. Há hardcoding em alguns pontos.
4. Não há um padrão claro de nomenclatura para as variáveis.

Vamos resolver por etapas?

Etapa 1: Criar funções para remover a repetição de chamadas dentro do código.

A primeira que me vem em mente é a mais simples: