Diferentes das linguagens "C-like", no Powershell não é usado os operadores tipo <, >, <=, !=, etc. Ele utiliza parâmetros específicos para isso, por exemplo:
-eq | Igual |
-ne | Diferente |
-lt | Menor que |
-le | Menor que ou igual |
-gt | Maior que |
-ge | Maior que ou igual |
Isso ocorre porque alguns operadores tem outras funções, por exemplo, > que é usado para escrever algo num arquivo.
Veja alguns exemplos:
3 -lt 10
3 -le 2
3 -le 3
3 -gt 4
88 -gt 4
88 -ge 4
"i" -eq "q"
"i" -eq "w"
"i" -eq "i"
"i" -ne "i"
"b" -ne "i"
PS: Diferente de outras linguagens, o Powershell não é case-sensitive.
Para forçar a diferenciação de maiúsculas e minúsculas, podemos fazer assim, colocando um c no parâmetro (o padrão é o i), dessa forma:
"Fulano" -eq "fulano"
"Fulano" -ceq "fulano"
Outro exemplo:
[int64] -eq [int16]
[int] -eq [int]
Uma hashtable é uma tabela que armazenamos dados, fazemos assim:
$ht = @{server = $true; conec = $false}
$ht.GetType()
$ht.server
$ht.conec
if($ht.conec -eq $true) {
"Servidor Conectado!"
}
else {
"Servidor Desconectado!"
}
$ht.conec = $true
if($ht.conec -eq $true) {
"Servidor Conectado!"
}
else {
"Servidor Desconectado!"
}
Os dados de dentro das hashtables são chamados de chaves e valores.
Os operadores aritméticos são os mesmos das outras linguagens (+, -, *, / e %), por exemplo:
2 + 2
1456564564654545645 + 15465165465145146
15 / 3
88 * 2
10 / 3
10 % 3
Lembrando que o % retorna o resto da divisão. Qualquer número que o resto de 2 for 1 é ímpar, e se for 0 é par, o que podemos colocar numa condição, por exemplo:
10 % 3
10 % 2
159 % 2
159 % 2 -eq 0
159 % 2 -eq 1
Como em outras linguagens, temos também os parênteses, por exemplo:
(2 + 2) * 5
PS: Lembre-se da ordem de operação matemática, que é de parênteses, depois multiplicações, divisões e restos, e por último adições e subtrações.
Outros exemplos:
(2 + 2) * (3 + 2)
((2 + 2) * (3 + 2) - 8)
Lembrando que o + também é usado para concatenação, por exemplo:
"Powershell" + " é " + "foda!"
E podemos também repetir strings:
"w" * 3
Temos também métodos matemáticos para utilizar no Powershell, esses são alguns deles:
[Math]::Abs()
para pegar o valor absoluto de um número.[Math]::Pow()
para criar uma potencialização entre dois números.[Math]::Sqrt()
para mostrar a raiz quadrada.[Math]::Round()
para mostrar o número arredondado para o inteiro mais próximo. Para cima se usa [Math]::Ceiling()
e para baixo [Math]::Floor()
.Veja um exemplo de uso:
[Math]::Abs(-50)
[Math]::Sqrt(81)
[Math]::Ceiling(3.5)
[Math]::Floor(3.5)
[Math]::Round(3.5)
Para gerar números aleatórios fazemos assim:
$numAle = [Random]::new()
Write-Output $numAle.Next() # Gera qualquer número inteiro
Write-Output $numAle.NextDouble() # Gera qualquer número real entre 0 e 1
Write-Output $numAle.Next(1, 6) # Gera de 1 a 5
Podemos fazer multiplicações, por exemplo, de MB e relacionados, por exemplo:
1mb # Retorna a quantidades de bytes de 1 MB
1mb / 2
1gb / 100mb
1mb + 1mb
Podemos usar desde KB até PB.
Muitas vezes precisaremos armazenar dados na memória do computador, essas são as variáveis, que podem ser modificadas caso necessário.
As variáveis precisam ter um nome, no caso do Powershell elas começam com um cifrão, e os tipos são definidos automaticamente, no caso do Powershell:
$nome = "Fulano"
$nome
$cep = 00000000
$cep
Mas podemos forçar a tipagem de uma variável, por exemplo:
[string]$nome = "Fulano"
$nome.GetType()
[int]$n = 1
$n.GetType()
Podemos olhar quais comandos tem uma palavra no nome, podemos fazer assim:
Get-Command *-Variable
Isso pega o nome e valor da variável:
$nome = "Fulano"
Get-Variable nome
Isso a criar e remover variável:
New-Variable -Name teste -Value WPS
$teste
Remove-Variable teste
PS: Temos também o Set-Variable
que funciona de forma similar ao new, mas ele pode modificar o dado de uma variável já existente.
Existe no Powershell o conceito de constante. As constantes também armazenam conteúdos, mas elas não podem ter o conteúdo alterado e por isso, devem ser inicializadas.
Veja como criar uma constante:
Set-Variable -Name PI -Value ([Math]::PI) -Option Constant
# Ao invés de Constant pode ser usado ReadOnly
$PI
Dessa forma, a única forma de alterar o conteúdo é usar o Remove-Variable e criá-la novamente.
Para criar strings multilinhas, fazemos assim:
@"
Isso é
um exemplo
de string
multilinha!
Não coloque
nada na mesma
linha das
aspas e arrobas!
"@
Como visto acima, ele formata da mesma forma que foi escrita.
Podemos atribuir a uma variável também, por exemplo:
$trecho = @"
Eu vou, atrás do trio elétrico vou.
Dançar ao negro toque do agogô.
Curtindo minha baianidade nagô, ô ô ô ô ô.
Eu queria que essa fantasia fosse eterna.
Quem sabe um dia a paz vence a guerra.
E viver será só festejar.
"@
$trecho
Dessa forma, podemos por exemplo, escrever código em outras linguagens e gerar um arquivo com ela, por exemplo:
@"
nome = "Fulano"
print("Seu nome é {}.".format(nome))
input("")
"@ | Out-File -FilePath nome.py -Encoding utf8
Na forma acima, ele gerará um arquivo py com código Python.
Em programação, é muito importante sabermos como colocar comentários. No Powershell fazemos assim:
# Nessa linha peço uma string e guardo na variável nome
$nome = Read-Host "Digite seu nome"
Write-Host "Seu nome é $nome"
Como visto, usamos o #
para comentários em Powershell.
Para definir um comentário de várias linhas, fazemos assim:
<#
Isso
é
um
comentário
de
várias
linhas!
#>
O cmdlet Get-Date serve para dois propósitos básicos, retornar a data atual e manipular datas, executando ele da forma simples nos retorna data atual do sistema.
Apenas digite Get-Date
para pegar a data atual.
Podemos formatar a data, por exemplo:
# Exemplo de exibição no formato dd/mm/yyyy hh:mm:ss:
Get-Date -Uformat "%d/%m/%Y %H:%M:%S"
Exemplo mais complexo:
$d = Get-Date -UFormat "%d"
$m = Get-Date -UFormat "%m"
$a = Get-Date -UFormat "%Y"
$s = Get-Date -UFormat "%w"
$hora = Get-Date -UFormat "%H:%M:%S"
$meses = @("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro")
$mes = $meses[$m - 1]
$semana = @("Domingo", "Segunda-Feira", "Terça-Feira", "Quarta-Feira", "Quinta-Feira", "Sexta-Feira", "Sábado")
$sem = $semana[$s]
Write-Output "Hoje é dia $d de $mes de $a. $sem."
Write-Output "A hora atual é $hora."
O Get-Date também pode ser utilizado para converter uma string para um objeto de date, que pode ser útil para descobrirmos mais informações sobre uma data. Por exemplo:
Get-Date "09/03/2020 19:42:53"
Dessa forma transformando uma data de string em objeto podemos utilizar era em nossas operações de diversas formas como por exemplo comparar duas datas, como podem ver:
$dataA = Get-Date "05/05/2012"
$dataB = Get-Date "06/05/2012"
$dataA -lt $dataB
$dataB -gt $dataA
Além dessas utilidades ele também serve para manipularmos as datas como por exemplo adicionando ou retirando tempo, por exemplo:
$data = Get-Date
$data.AddMinutes(480)
$data.AddMinutes(-90)