Cmdlets: o conceito
Esta aula introduz o conceito de cmdlets no PowerShell, explicando a estrutura verbo-substantivo, sua importância para consistência e descoberta, e como explorar e usar cmdlets na prática.
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 arquivoPor 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 verbosDescobrindo 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 usoExemplos
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, MemberTypeReferências
- Cmdlet Overview - Microsoft Docs
- Approved Verbs - Microsoft Docs
- Get-Command - Microsoft Docs
- Get-Help - Microsoft Docs
- Get-Member - Microsoft Docs
Exercícios
Use
Get-Commandpara listar todos os cmdlets com o verboSet. Quantos existem? (Dica: useMeasure-Objectpara contar)✓ Resposta:Get-Command -Verb Set | Measure-Object | Select-Object CountQual cmdlet você usaria para obter a data e hora atuais? Use
Get-Commandpara confirmar.✓ Resposta:Get-Date. Para confirmar:Get-Command Get-DateUse
Get-Helppara ver exemplos do cmdletNew-Item. Que parâmetro cria um diretório?✓ Resposta:
O parâmetro éGet-Help New-Item -Examples-ItemType Directory.Liste todos os serviços que estão parados (status 'Stopped') usando cmdlets.
✓ Resposta:Get-Service | Where-Object {$_.Status -eq 'Stopped'}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: VerboStop,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.