Cmdlets (pronuncia-se "command-lets") são comandos leves do PowerShell, implementados em .NET, que realizam uma única função. Eles são a base da automação no PowerShell, substituindo comandos tradicionais de shell por uma estrutura padronizada e consistente. Nesta aula, vamos explorar a estrutura verbo-substantivo, entender por que essa convenção foi adotada e aprender a descobrir e usar cmdlets.

Diferente de shells antigos como o cmd.exe, onde comandos têm nomes arbitrários (ex.: dir, copy), o PowerShell impõe uma nomenclatura previsível. Isso facilita o aprendizado, a descoberta e a manutenção de scripts. Vamos mergulhar nesse conceito.

Estrutura Verbo-Substantivo (Get-, Set-)

Cada cmdlet segue o padrão Verbo-Substantivo. O verbo indica a ação (como Get, Set, New, Remove) e o substantivo especifica o alvo (como Process, Service, Item). Por exemplo, Get-Process obtém processos, Set-Service altera o estado de um serviço.

Os verbos são padronizados pela Microsoft (ex.: Get para ler, Set para escrever, New para criar, Remove para deletar). Substantivos geralmente são singulares e representam objetos gerenciáveis. Essa estrutura torna o PowerShell auto-documentável: ao ver Get-*, você sabe que está recuperando informações.

# Exemplos de cmdlets com verbo-substantivo
Get-Process          # Lista processos
Set-Service -Name Spooler -Status Running  # Altera serviço
New-Item -Path C:\Temp -ItemType Directory  # Cria diretório
Remove-Item -Path C:\Temp\test.txt         # Deleta arquivo

Por que essa convenção

A convenção verbo-substantivo resolve problemas históricos de shells: nomes de comandos inconsistentes (ex.: dir vs ls) e falta de padrão para parâmetros. Com cmdlets, o nome do comando já indica sua ação e alvo, reduzindo a necessidade de consultar ajuda frequente.

Além disso, a padronização permite que o PowerShell ofereça descoberta integrada via Get-Command e Get-Help. Um administrador pode adivinhar o nome de um cmdlet baseado no que deseja fazer: "Quero parar um serviço? Stop-Service". Isso acelera o aprendizado e a produtividade.

# O PowerShell fornece listas de verbos autorizados
Get-Verb | Select-Object -First 10  # Mostra os primeiros 10 verbos

Descobrindo cmdlets

O cmdlet Get-Command é a ferramenta principal para descobrir cmdlets disponíveis. Use wildcards para filtrar: Get-Command -Verb Get lista todos os cmdlets com verbo Get. Também é possível buscar por substantivo: Get-Command -Noun Process.

Para obter ajuda detalhada, use Get-Help (ex.: Get-Help Get-Process -Full). O PowerShell também oferece Get-Member para explorar propriedades e métodos de objetos retornados por cmdlets.

# Descobrindo cmdlets
Get-Command -Verb Get -Noun Process  # Encontra cmdlets com verbo Get e substantivo Process
Get-Command -Name *Service*          # Todos cmdlets relacionados a serviço
Get-Help Get-Process -Examples       # Exemplos de uso

Exemplos

Vamos ver cmdlets em ação, combinando descoberta e uso prático. Primeiro, listamos serviços do Windows com Get-Service. Depois, filtramos por status com Where-Object (outro cmdlet).

# Listar serviços em execução
Get-Service | Where-Object {$_.Status -eq 'Running'}

# Criar um arquivo de log
New-Item -Path C:\Logs\app.log -ItemType File -Force

# Obter processos com mais de 100 MB de memória
Get-Process | Where-Object {$_.WorkingSet -gt 100MB}

# Usar Get-Member para explorar objetos
Get-Process | Get-Member | Select-Object Name, MemberType

Referências

Exercícios

  1. Use Get-Command para listar todos os cmdlets com o verbo Set. Quantos existem? (Dica: use Measure-Object para contar)

    ✓ Resposta:
    Get-Command -Verb Set | Measure-Object | Select-Object Count
  2. Qual cmdlet você usaria para obter a data e hora atuais? Use Get-Command para confirmar.

    ✓ Resposta: Get-Date. Para confirmar: Get-Command Get-Date
  3. Use Get-Help para ver exemplos do cmdlet New-Item. Que parâmetro cria um diretório?

    ✓ Resposta:
    Get-Help New-Item -Examples
    O parâmetro é -ItemType Directory.
  4. Liste todos os serviços que estão parados (status 'Stopped') usando cmdlets.

    ✓ Resposta:
    Get-Service | Where-Object {$_.Status -eq 'Stopped'}
  5. Descubra qual verbo é usado para cmdlets que alteram o estado de um serviço (ex.: iniciar, parar). Liste todos os cmdlets com esse verbo.

    ✓ Resposta: Verbo Stop, Start, Suspend, Resume. Para listar: Get-Command -Verb Start,Stop,Suspend,Resume -Noun Service

Boas Práticas

Ao nomear seus próprios cmdlets (se você criar módulos), sempre use verbos aprovados (consulte Get-Verb). Prefira substantivos no singular e evite ambiguidades. Isso garante consistência com o ecossistema do PowerShell.

Além disso, use parâmetros nomeados em vez de posicionais para maior clareza. Exemplo: Set-Service -Name Spooler -Status Running é mais legível que Set-Service Spooler Running.