No PowerShell, tudo é um objeto. Cada objeto possui propriedades (dados) e métodos (ações). Saber explorar esses membros é essencial para manipular dados de forma eficiente. Nesta aula, você aprenderá a usar o cmdlet Get-Member para descobrir o que um objeto oferece, a acessar propriedades e a chamar métodos, com exemplos do mundo real.

Dominar propriedades e métodos permite que você extraia informações específicas, modifique objetos e execute operações complexas com poucas linhas de código. Vamos começar!

Get-Member

O cmdlet Get-Member (ou seu alias gm) é a ferramenta principal para inspecionar objetos. Ele exibe as propriedades, métodos e eventos de um objeto, além de seus tipos e definições. Sempre que você encontrar um novo tipo de objeto, use Get-Member para entender sua estrutura.

Para usar, pipe um objeto para Get-Member. Exemplo:

Get-Process | Get-Member

Isso lista todos os membros de um processo. Você pode filtrar por tipo de membro com os parâmetros -MemberType (Property, Method, Event) ou -Name para buscar um nome específico. Use -Force para ver membros ocultos ou internos.

Acessando propriedades

Propriedades são acessadas usando a notação de ponto: $objeto.Propriedade. Você pode acessar uma única propriedade ou várias. Por exemplo:

$processo = Get-Process -Id $pid
$processo.Name          # Retorna o nome do processo
$processo.StartTime     # Retorna a hora de início

Para acessar propriedades aninhadas, encadeie pontos: $objeto.Propriedade.SubPropriedade. Cuidado com valores nulos; use operadores como ?. (no PowerShell 7+) para evitar erros. Exemplo:

$processo.StartInfo?.FileName  # Acessa FileName se StartInfo não for nulo

Chamando métodos

Métodos são ações que o objeto pode executar. São chamados com parênteses: $objeto.Metodo(argumentos). Métodos podem ter parâmetros obrigatórios ou opcionais. Exemplo com o objeto System.String:

$texto = "Olá, Mundo!"
$texto.ToUpper()               # Retorna "OLÁ, MUNDO!"
$texto.Contains("Mundo")      # Retorna True

Métodos podem modificar o objeto (se for mutável) ou retornar um novo valor. Alguns métodos não retornam nada (void). Use Get-Member -MemberType Method para ver a assinatura completa.

Exemplos

Vamos combinar propriedades e métodos em cenários práticos.

Exemplo 1: Trabalhando com arquivos

$arquivo = Get-Item "C:\temp\exemplo.txt"
$arquivo.FullName          # Propriedade: caminho completo
$arquivo.Length            # Propriedade: tamanho em bytes
$arquivo.Delete()          # Método: deleta o arquivo

Exemplo 2: Listando processos com propriedades específicas

Get-Process | Select-Object Name, CPU, WorkingSet | Where-Object { $_.CPU -gt 10 }

Exemplo 3: Usando métodos de string para limpar dados

$dados = "  João;30;RJ  "
$dados = $dados.Trim()                          # Remove espaços
$partes = $dados.Split(';')                     # Divide em array
$nome = $partes[0]
$idade = [int]$partes[1]                        # Converte para inteiro

Exemplo 4: Chamando métodos em objetos COM

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true                          # Propriedade
$excel.Quit()                                   # Método

Boas práticas

  • Sempre verifique se um método existe antes de chamá-lo, usando Get-Member.
  • Prefira acessar propriedades em vez de métodos quando possível, pois são mais rápidas.
  • Use Select-Object para selecionar apenas as propriedades necessárias.
  • Cuidado com métodos que modificam o sistema (ex.: Delete()); teste em ambientes seguros.

Referências

Exercícios

  1. Use Get-Member para listar todas as propriedades de um objeto System.DateTime retornado por Get-Date. Quantas propriedades existem?

    ✓ Resposta: Execute Get-Date | Get-Member -MemberType Property. O número de propriedades pode variar conforme a versão, mas geralmente são mais de 10 (ex.: Year, Month, Day, Hour, Minute, Second, DayOfWeek, etc.).
  2. Acesse a propriedade Length de um arquivo de texto qualquer. Qual é o valor? (Use Get-Item e a propriedade Length.)

    ✓ Resposta: Exemplo: (Get-Item "C:\temp\meu_arquivo.txt").Length. O valor será o tamanho em bytes. Se o arquivo não existir, ocorrerá erro.
  3. Chame o método ToUpper() na string "powershell é legal". Qual é o resultado?

    ✓ Resposta: O resultado é "POWERSHELL É LEGAL".
  4. Use Get-Member para encontrar um método que converta uma string para minúsculas. Qual é o nome do método?

    ✓ Resposta: O método é ToLower(). Execute "teste" | Get-Member -MemberType Method e procure por ToLower.
  5. Crie um script que liste todos os processos com o nome "notepad" e, para cada um, exiba o nome do processo e o tempo de início (propriedade StartTime).

    ✓ Resposta:
    Get-Process -Name notepad | ForEach-Object { $_.Name + " - " + $_.StartTime }