Aprenda Powershell

  • Página Inicial
  • Contato!
  • Tudo sobre Powershell Parte 1!
  • Tudo sobre Powershell Parte 2!
  • Tudo sobre Powershell Parte 3!
  • Tudo sobre Powershell Parte 4!
  • Tudo sobre Powershell Parte 3

    Caracteres de Escape - Parte 1

    O Powershell também tem caracteres de escape, só que diferente de outras linguagens, ele não usa a barra invertida, já que esta é usada para separar nomes de pastas. Ele utiliza crases (`).

    Veja um exemplo de uso:

    
    Write-Host "Instituto de Scripts`0" # Fim de linha
    
    Write-Host "Alerta: `a" # Aviso sonoro
    
    Write-Host "Uma frase de exemplo`n" # Pula de linha
    
    

    Basicamente são os mesmos usados nas outras linguagens, apenas substituindo o \ pelo `, como `n, `", `t, etc.

    Write-Host

    Podemos utilizar parâmetros no Write-Host, por exemplo:

    
    Write-Host "Fulano"
    
    Write-Host -Object (Get-Date)
    
    

    Veja outros usos para esse comando:

    
    Write-Host "Fulano" -f Red -b Black # Isso muda a cor
    
    Write-Host "Fulano" "Beltrano" -Separator "_"
    
    Write-Host @("Fulano", "Beltrano") -Separator "`n"
    
    

    Operadores Lógicos

    Os operadores lógicos como &&, || e ! não funcionam no Powershell, por estes serem característicos do C e semelhantes. No Powershell usamos -and, -or e -not.

    Veja um exemplo abaixo:

    
    (3 -eq 3) -and (3 -eq 3)
    
    (3 -eq 3) -and (3 -eq 3) -and (4 -gt 5)
    
    (3 -eq 3) -or (3 -eq 3) -or (4 -gt 5)
    
    -not (3 -eq 3)
    
    -not (4 -gt 5)
    
    

    Como sabemos, no and tudo tem que ser verdadeiro pra retornar true, no or só necessita que apenas uma das expressões sejam verdadeiras para retornar true, e o not inverte a condição.

    Estruturas de Decisão If e Else

    A estrutura do if e else no Powershell é bem parecida com a das linguagens C-like, por exemplo:

    
    if(1 -lt 5) {
        "1 é menor que 5"
    }
    
    # Outra condição
    
    if(5 -lt 8) {
        "5 é menor que 8"
    }
    
    

    Ou seja, se no if a condição for verdadeira, ela será executada, senão ela não executará, ou poderá executar o que está no else, por exemplo:

    
    if(1 -lt 5) {
        "1 é menor que 5"
    }
    else {
        "1 não é menor que 5"
    }
    
    # Outra condição
    
    if(5 -lt 8) {
        "5 é menor que 8"
    }
    else {
        "5 não é menor que 8"
    }
    
    

    Agora baixe esse arquivo de texto para executarmos um teste: Clique Aqui

    E no Powershell digite o comando Select-String -Path .\arq.txt -Pattern "gosto de bolo", veja que ele retorna a linha e o conteúdo do arquivo. Então no script ps1 fazemos assim:

    
    if(Get-ChildItem .\arq.txt | Select-String "gosto de bolo") {
        "Ele gosta de bolo sim!"
    }
    else {
        "Ele não gosta de bolo!"
    }
    
    

    Podemos por exemplo, usar ifs aninhados também:

    
    $u = Read-Host "Usuário"
    
    $s = Read-Host "Senha"
    
    if($u -eq "Admin") {
        if($s -eq "123") {
            "Login Aceito!"
        }
        else {
            "Senha Incorreta!"
        }
    }
    else {
        "Login Inválido!"
    }
    
    

    E o elseif:

    
    $num = [int](Read-Host "Digite um número")
    
    if($num % 2 -eq 0) {
        "$num é par!"
    }
    elseif($num % 2 -eq 1) {
        "$num é ímpar!"
    }
    else {
        "Valor inválido!"
    }
    
    

    Estrutura de Decisão Switch

    Já o Switch, funciona dessa forma:

    
    $cor = "branco"
    
    switch($cor) {
        "azul" {
            "Você escolheu azul!"
            break
        }
        "preto" {
            "Você escolheu preto!"
            break
        }
        "rosa" {
            "Você escolheu rosa!"
            break
        }
        "amarelo" {
            "Você escolheu amarelo!"
            break
        }
        "verde" {
            "Você escolheu verde!"
            break
        }
        "branco" {
            "Você escolheu branco!"
            break
        }
        default {
            "Você escolheu outra cor!"
            break
        }
    }
    
    

    PS: Caso tenha mais de uma opção pro mesmo caso, faça assim:

    
    {$_ -in "vermelho", "vinho"} {
        "Você escolheu tons de vermelho!"
        break
    }
    
    

    Outro exemplo:

    
    $dia = (Get-Date).DayOfWeek.value__
    
    switch($dia) {
        0 {
            "Hoje é Domingo!"
            break
        }
        1 {
            "Hoje é Segunda-Feira!"
            break
        }
        2 {
            "Hoje é Terça-Feira!"
            break
        }
        3 {
            "Hoje é Quarta-Feira!"
            break
        }
        4 {
            "Hoje é Quinta-Feira!"
            break
        }
        5 {
            "Hoje é Sexta-Feira!"
            break
        }
        6 {
            "Hoje é Sábado!"
            break
        }
        default {
            "Dia Inválido!"
            break
        }
    }
    
    

    PS: O break não é obrigatório no Powershell, mas ele é usado para evitar que seja escolhido mais de uma condição dentro do switch.

    Estruturas de Repetição

    A estrutura de repetição while também existe no powershell, veja um exemplo de uso:

    
    $n = 1
    
    while($n -le 10) {
        Write-Host $n
    
        $n++
    }
    
    

    Também podemos usar o break e o continue nos laços:

    
    $n = 0
    
    while($true) {
        $n++
    
        if($n -eq 11) {
            continue
        }
        elseif($n -eq 15) {
            break
        }
    
        Write-Host $n
    }
    
    

    Temos também o do while, que garante pelo menos uma execução, independente da condição:

    
    $n = 0
    
    do {
        Write-Host $n
    
        $n++
    }
    while($n -le 10)
    
    

    E temos o for, onde controlamos melhor a quantidade de repetições:

    
    for($i = 0; $i -lt 10; $i++) {
        "Volta $i"
    }
    
    

    Vetores e Matrizes

    Também podemos definir vetores no Powershell:

    
    $numeros = 12, 88, 59, 43, 92, 75, 33
    
    for($i = 0; $i -lt $numeros.Length; $i++) {
        $numeros[$i] +  "`n"
    }
    
    

    Também podemos usar um foreach pra isso:

    
    $numeros = 12, 88, 59, 43, 92, 75, 33
    
    foreach($n in $numeros) {
        "$n"
    }
    
    

    Como podemos inicializar com um contador, por exemplo:

    
    $numeros = 1..10
    
    foreach($n in $numeros) {
        "$n"
    }
    
    

    Com strings, já fazemos assim:

    
    $nomes = @("Fulano", "Beltrano", "Sicrano")
    
    foreach($n in $nomes) {
        "$n"
    }
    
    

    Mas essa forma pode ser usada para números também:

    
    $numeros = @(12, 88, 59, 43, 92, 75, 33)
    
    

    O Powershell permite misturar tipos dentro dos arrays.

    Veja um exemplo de matriz, com vários tipos de dados:

    
    $pessoas = @(("Fulano", 30, 1.6),
                 ("Beltrano", 17, 1.7),
                 ("Sicrano", 26, 1.71))
    
    for($l = 0; $l -lt 3; $l++) {
        for($c = 0; $c -lt 3; $c++) {
            Write-Host -NoNewline $pessoas[$l][$c] " "
        }
        ""
    }
    
    

    Mas podemos forçar uma tipagem de dados também:

    
    [string]$letras = @('A', 'B', 'C')
    
    $letras += 'D'
    
    

    E também podemos usar o objeto ArrayList, assim:

    
    Using Assembly System.Collections
    
    $lista = [System.Collections.ArrayList]::new()
    
    $lista.AddRange(('A', 'B', 'C')) # Adiciona vários itens
    
    $lista.Add('D') # Adiciona um item
    
    $lista.Contains('A') # Verifica se um item existe
    
    $lista.Capacity # Capacidade de Dados
    
    $lista.Count # Tamanho de dados
    
    "`n"
    
    foreach($l in $lista) {
        $l
    }
    
    # Isso força conversão de array comum pra arraylist:
    
    $novaLista = [System.Collections.ArrayList]@('A', 'E', 'I', 'O', 'U')
    
    

    Para ordenar arrays, podemos fazer assim:

    
    $numeros = @(7, 4, 6, 2, 1, 9, 3, 5, 0, 8)
    
    $numeros | Sort-Object