Explorando propriedades e métodos
Esta aula ensina como explorar e manipular objetos no PowerShell usando Get-Member, acessar propriedades e chamar métodos, com exemplos práticos para automatizar tarefas.
No PowerShell, tudo é um objeto, e cada objeto possui propriedades (dados) e métodos (ações). Para aproveitar ao máximo o potencial da linguagem, é essencial saber como descobrir e utilizar esses membros. Esta aula aborda o cmdlet Get-Member para inspecionar objetos, como acessar propriedades e invocar métodos, além de exemplos práticos que consolidam esses conceitos.
Dominar propriedades e métodos permite que você extraia informações específicas de comandos e manipule objetos de forma dinâmica, tornando seus scripts mais enxutos e poderosos.
Get-Member
O cmdlet Get-Member (ou seu alias gm) é a ferramenta principal para descobrir os membros de um objeto. Ele exibe as propriedades, métodos, eventos e outros membros disponíveis. Você pode usá-lo em pipeline ou diretamente com o parâmetro -InputObject.
Exemplo básico:
Get-Process | Get-MemberIsso lista todos os membros do objeto System.Diagnostics.Process. Para filtrar apenas propriedades, use -MemberType Property; para métodos, -MemberType Method. Também é possível buscar por nome com -Name.
Get-Process | Get-Member -MemberType Property | Select-Object Name, DefinitionAcessando propriedades
Para acessar uma propriedade de um objeto, use a sintaxe de ponto: $objeto.Propriedade. Propriedades podem conter valores simples (string, int) ou outros objetos.
Exemplo: obter o nome do processo atual.
$processo = Get-Process -Id $pid
$processo.ProcessNamePara acessar propriedades aninhadas, encadeie os pontos: $objeto.Propriedade.SubPropriedade. Use Select-Object -ExpandProperty para extrair um array de valores de uma propriedade de uma coleção.
Get-Service | Select-Object -ExpandProperty NameChamando métodos
Métodos são ações que um objeto pode executar. São chamados com parênteses: $objeto.Metodo(). Alguns métodos aceitam argumentos.
Exemplo: matar um processo pelo método Kill().
$proc = Get-Process -Name notepad
$proc.Kill()Métodos podem retornar valores. Use Get-Member para ver a definição e os parâmetros. Para métodos estáticos (da classe), use [Classe]::Metodo().
[System.Math]::Round(3.14159, 2)Exemplos
Exemplo 1: Listar propriedades de um arquivo.
$arquivo = Get-Item C:\Windows\win.ini
$arquivo | Get-Member -MemberType Property
$arquivo.Length # tamanho em bytesExemplo 2: Usar método para copiar um arquivo.
$origem = Get-Item "C:\temp\teste.txt"
$origem.CopyTo("C:\temp\teste_backup.txt")Exemplo 3: Trabalhar com coleções – acessar propriedades de todos os processos.
Get-Process | ForEach-Object { $_.Name + " - " + $_.WorkingSet64 }Exemplo 4: Chamar método em cada item de uma lista.
Get-Service | Where-Object { $_.Status -eq 'Stopped' } | ForEach-Object { $_.Start() }Boas práticas
Sempre use Get-Member para explorar objetos desconhecidos. Prefira acessar propriedades diretamente em vez de usar expressões regulares para extrair dados de saída textual. Ao modificar objetos (ex.: iniciar serviços), tenha cuidado com privilégios e confirme ações com -WhatIf quando possível.
Referências
- Documentação oficial do Get-Member
- PowerShell 101: Objects
- Everything you wanted to know about objects
- SS64: PowerShell Methods
- PowerShell 101: Scripting
Exercícios
Use
Get-ProcesseGet-Memberpara listar apenas as propriedades do objeto processo. Quantas propriedades existem?✓ Resposta: ExecuteGet-Process | Get-Member -MemberType Property | Measure-Object. O número exato pode variar conforme a versão do PowerShell, mas geralmente há dezenas de propriedades (ex.: 19 propriedades comuns).Acesse a propriedade
Namedo objeto retornado porGet-Date. Qual é o valor?✓ Resposta:(Get-Date).Nameretorna o dia da semana em formato string, por exemplo: "Monday".Chame o método
ToShortDateString()em um objetoDateTime. Mostre o código e o resultado esperado.✓ Resposta:(Get-Date).ToShortDateString()retorna a data no formato curto do sistema, ex.: "01/01/2023".Use
Get-Servicepara obter o serviço Spooler de impressão. Em seguida, chame o métodoStop()e depoisStart()para reiniciá-lo. (Atenção: execute como administrador se necessário.)✓ Resposta:$spooler = Get-Service -Name Spooler $spooler.Stop() Start-Sleep -Seconds 2 $spooler.Start()Crie um objeto personalizado com
New-Object PSObjecte adicione uma propriedadeNomee um métodoDizerOlaque imprime "Olá, [Nome]!". (Dica: useAdd-Membercom-MemberType ScriptMethod.)✓ Resposta:$obj = New-Object PSObject Add-Member -InputObject $obj -MemberType NoteProperty -Name "Nome" -Value "Maria" Add-Member -InputObject $obj -MemberType ScriptMethod -Name "DizerOla" -Value { "Olá, " + $this.Nome + "!" } $obj.DizerOla()