Variáveis no PowerShell
LidoNesta aula, você aprenderá a trabalhar com variáveis no PowerShell, desde a declaração simples com o símbolo $, passando por tipagem dinâmica e forte, até as variáveis automáticas e o conceito de escopo. Ao final, será capaz de criar scripts mais eficientes e evitar erros comuns.
Nesta aula, vamos mergulhar no universo das variáveis no PowerShell, um dos conceitos mais importantes para qualquer script. As variáveis são como "caixas" que armazenam informações que podem ser usadas e manipuladas ao longo do seu código. Dominar o uso de variáveis é essencial para escrever scripts dinâmicos, que respondem a mudanças de contexto e entrada do usuário.
O PowerShell adota uma abordagem única: as variáveis são identificadas pelo prefixo $ e, por padrão, são dinâmicas, ou seja, podem mudar de tipo durante a execução. No entanto, também podemos especificar tipos fixos para garantir maior controle. Além disso, o PowerShell já vem com uma série de variáveis automáticas que fornecem informações sobre o ambiente e o estado do console. Vamos explorar cada um desses aspectos a seguir.
Declaração ($var)
A declaração de uma variável no PowerShell é simples: basta usar o símbolo $ seguido de um nome. O PowerShell permite que você crie uma variável e atribua um valor na mesma linha, ou que declare sem valor (neste caso, ela recebe $null). O nome da variável deve começar com $ e pode incluir letras, números e sublinhado, mas não pode conter espaços ou caracteres especiais como . ou -.
É importante destacar que o PowerShell não exige declaração explícita: a primeira atribuição já cria a variável. No entanto, você pode usar New-Variable para criar com opções adicionais (como readonly ou constante). Vamos ver exemplos práticos de declaração.
# Atribuição direta
$nome = "Maria"
$idade = 30
# Variável sem valor inicial
$cidade
# Variável com valor nulo explícito
$cep = $null
# Criando variável com New-Variable
New-Variable -Name "pais" -Value "Brasil"
# Exibindo valores
Write-Host "Nome: $nome, Idade: $idade, Cidade: $cidade"
Observe que, ao tentar exibir $cidade, nada será mostrado, pois ela está como $null. Para verificar se uma variável existe, você pode usar Test-Path com o caminho da variável (por exemplo, Test-Path variable:nome).
Uma boa prática é usar nomes descritivos e consistentes, como $nomeUsuario ou $totalVendas. Evite nomes vagos como $a ou $x.
Tipagem
O PowerShell é uma linguagem de tipagem dinâmica, o que significa que as variáveis não têm um tipo fixo por padrão. Você pode atribuir um número a uma variável e depois atribuir uma string a ela sem erro. No entanto, o PowerShell também oferece tipagem forte opcional, permitindo que você restrinja o tipo de dados que uma variável pode armazenar.
Para declarar uma variável com tipo específico, você usa a sintaxe [tipo]$variavel. Os tipos mais comuns são [int], [string], [double], [bool], [datetime] e [array]. Ao fazer isso, o PowerShell tentará converter o valor atribuído para o tipo especificado; se não for possível, lançará um erro.
# Tipagem dinâmica
$valor = 10
Write-Host $valor
$valor = "dez"
Write-Host $valor
# Tipagem forte
[int]$numero = 5
$numero = "7" # Converte para inteiro (7)
Write-Host $numero
# Tentativa de atribuição inválida
# $numero = "abc" # Isso gera um erro
# Verificando o tipo com GetType()
$texto = "Olá"
Write-Host $texto.GetType() # System.String
Além disso, você pode usar a classe [System.Convert] ou métodos como ToInt32() para converter tipos manualmente, se necessário. Por exemplo: $valor = [System.Convert]::ToInt32("123").
É recomendável usar tipagem forte em scripts onde a segurança e a clareza são importantes, pois evita erros sutis de conversão e torna o código mais legível.
Variáveis automáticas
O PowerShell inclui um conjunto de variáveis automáticas que são mantidas pelo próprio PowerShell e fornecem informações sobre o ambiente de execução, o estado do console e a sessão atual. Essas variáveis são definidas pelo PowerShell e não devem ser sobrescritas, pois são usadas internamente. Conhecê-las ajuda a criar scripts mais robustos e dinâmicos.
Algumas das variáveis automáticas mais úteis são: $HOME (diretório inicial do usuário), $PSVersionTable (informações sobre a versão do PowerShell), $PWD (diretório atual), $PID (identificador do processo atual), $args (argumentos passados para um script ou função), e $_ (representa o objeto atual no pipeline). Vamos ver um exemplo prático de uso.
# Exibindo o diretório home
Write-Host "Seu diretório home é: $HOME"
# Versão do PowerShell
Write-Host "Versão: $($PSVersionTable.PSVersion)"
# Diretório atual
Write-Host "Diretório atual: $PWD"
# PID do processo
Write-Host "PID: $PID"
# Usando $_ no pipeline
Get-Process | Where-Object { $_.ProcessName -like "*powershell*" } | Select-Object ProcessName
Outra variável muito útil é $null, que representa um valor nulo, e $true/$false para booleanos. Também temos $Error (último erro ocorrido) e $Host (informações sobre o host atual).
É importante não atribuir valores a essas variáveis automáticas, pois isso pode causar comportamentos inesperados. Se você precisar de uma variável com nome similar, use um prefixo diferente, como $meuHome.
Escopo (visão geral)
O escopo de uma variável define onde ela é acessível e por quanto tempo ela existe. No PowerShell, o escopo pode ser global, local ou relativo a um script. Por padrão, as variáveis criadas em um script são locais ao script, o que significa que não são visíveis fora dele. Da mesma forma, variáveis criadas no console são globais, mas podem ser acessadas dentro de scripts se você usar o prefixo $global:.
O PowerShell usa um sistema de escopos hierárquicos: cada script ou função cria um novo escopo. Para acessar uma variável de um escopo pai, você pode usar o prefixo $script: para o escopo do script, ou $global: para o escopo global. Para criar uma variável em um escopo específico, use New-Variable com o parâmetro -Scope.
# Exemplo de escopo global e local
$global:mensagem = "Olá do escopo global"
function Teste-Escopo {
$local = "Olá do escopo local"
Write-Host $local
Write-Host $global:mensagem
}
Teste-Escopo
# A variável $local não está disponível aqui
# Write-Host $local # Erro: não reconhecida
Write-Host $global:mensagem
Neste exemplo, a variável $local só existe dentro da função Teste-Escopo. Já a variável $global:mensagem pode ser acessada de qualquer lugar. É importante entender o escopo para evitar bugs, como modificar uma variável acidentalmente ou não conseguir acessar dados de outro escopo.
Uma boa prática é evitar o uso excessivo de variáveis globais, pois elas podem tornar o código difícil de depurar. Prefira passar informações como parâmetros para funções ou usar variáveis de script quando necessário.
Boas práticas e observações finais
Ao trabalhar com variáveis no PowerShell, siga estas recomendações para escrever código mais limpo e confiável:
- Use nomes descritivos e em camelCase (ex.:
$nomeUsuario). - Prefira tipagem forte quando o tipo for conhecido e não deve variar.
- Evite sobrescrever variáveis automáticas; use outros nomes.
- Entenda o escopo das suas variáveis; opte por escopo local sempre que possível.
- Use
Write-HostouWrite-Outputpara exibir valores, mas lembre-se de queWrite-Hostnão envia para o pipeline.
Lembre-se de que as variáveis são a base para a criação de scripts complexos e interativos. Pratique os exemplos e explore os recursos oferecidos pelo PowerShell para se tornar um profissional mais eficiente.
Exercícios
-
Crie uma variável chamada
$meuNomee atribua seu nome a ela. Em seguida, exiba a mensagem "Olá, [seu nome]!" usandoWrite-Host.✓ Resposta:$meuNome = "Maria" Write-Host "Olá, $meuNome!" -
Declare uma variável do tipo
[int]chamada$idadee atribua o valor 25. Depois, tente atribuir a string "trinta" a ela e observe o erro. Em seguida, atribua a string "30" e veja o que acontece.✓ Resposta:[int]$idade = 25 # $idade = "trinta" # Isso gera um erro: não é possível converter "trinta" para int $idade = "30" # Converte com sucesso para 30 Write-Host $idade -
Escreva um script que mostre a versão do PowerShell, o diretório atual e o nome do computador usando variáveis automáticas.
✓ Resposta:Write-Host "Versão do PowerShell: $($PSVersionTable.PSVersion)" Write-Host "Diretório atual: $PWD" Write-Host "Nome do computador: $env:COMPUTERNAME" -
Crie uma função chamada
Mostrar-Somaque receba dois números como parâmetros, calcule a soma e exiba o resultado. Use variáveis locais para armazenar os números e o resultado. Teste a função chamando-a com valores diferentes.✓ Resposta:function Mostrar-Soma { param( [int]$a, [int]$b ) $soma = $a + $b Write-Host "A soma de $a e $b é $soma" } Mostrar-Soma -a 5 -b 3 Mostrar-Soma -a 10 -b 20 -
Explique a diferença entre escopo global e local e dê um exemplo de quando você precisaria usar uma variável global.
✓ Resposta:O escopo global refere-se a variáveis acessíveis em todo o ambiente do PowerShell, incluindo scripts e funções. O escopo local é restrito à função ou script onde a variável foi criada. Uma variável global pode ser útil para armazenar configurações que precisam ser acessadas por várias funções, como uma string de conexão com banco de dados. Exemplo:
$global:config = "servidor=localhost;banco=teste" function Conectar { Write-Host "Conectando com $global:config" } Conectar