PowerShell – 5 cmdlets úteis para desenvolvedores

Saudações, devs! ✌😎
Neste post eu trago uma lista dos principais comandos do PowerShell, chamados de commandlets (ou cmdlets), que uso quando estou desenvolvendo e/ou preparando aulas. Eles são tão úteis pra mim que pensei em compartilhar com vocês. Enjoy it! 😉
ATENÇÃO! Para ese post, estou considerando a versão 7.1.4. Para baixar a última versão, clique aqui!
1- Get-Content
O cmdlet Get-Content retorna o conteúdo de um arquivo direto no Shell. Muito útil para visualizar rapidamente o conteúdo de arquivos.
<# utilização simples do Get-Content #>
Get-Content <nome_do_arquivo>
Se combinado com o parâmetro -wait, o cmdlet continuará em espera, ou seja, poderemos acompanhar as mudanças do arquivo em tempo real. Isso é muito útil quando queremos monitorar mudanças em arquivos de log ou outros arquivos de um projeto de software.
<# usando o parâmetro -wait #>
Get-Content <nome_do_arquivo> -wait
Também é possível limitar a quantidade de linhas que queremos exibir com o parâmetro -TotalCount.
<# limitando a quantidade de linhas exibidas com -TotalCount #>
Get-Content <nome_do_arquivo> -TotalCount
Também é possível paginar um arquivos grande usando o pipeline, ou seja, passando o conteúdo retornado no Get-Content para o cmdlet OutHost, veja:
<# paginando resultados com OutHost #>
Get-Content <nome_do_arquivo> | OutHost -paging
Uma outra forma interessante é usar em conjunto com o cmdlet Select-String, usado para pesquisar strings em arquivos. Veja:
<# pesquisando a string PowerShell em um arquivo #>
Get-Content <nome_do_arquivo> | Select-String 'PowerShell'
2 – Clear Content
O comando Clear-Content limpa o conteúdo de um arquivo, mas preserva o arquivo em si. É um comando muito útil para limpar arquivos de logs, por exemplo, em tempo de projeto, quando estamos executando testes. Veja:
Clear-Content <nome_do_arquivo>
3 – Get-Process
O cmdlet Get-Process retorna a lista dos processos ativos no Windows, sejam eles de primeiro ou segundo plano. É possível usar o pipeline do PowerShell para aplicar filtros e classificar a saída de diversas maneiras.
De fato é um comando extremamente útil. Veja alguns exemplos:
<# Utilização simples do Get-Process #>
Get-Process
<# listando processos aplicando filtro de nome e caracteres curinga. Nesse exemplo retornamos todos os processos do Chrome #>
Get-Process chro*
<# também podemos separar os filtros de nome por vírgula #>
Get-Process chro*, firefox, subli*
Também podemos paginar e classificar a saída com os cmdlets Select-Object, OutHost e Sort-Object, veja alguns exemplos:
<# paginação de resultados #>
Get-Process chrome*, note*, firefox | Out-Host -Paging
<# Listando apenas algumas propriedades dos processos com Select-Object #>
Get-Process | Select-Object Id, ProcessName, WS
<# Listando os 5 processos que mais consomem memória #>
Get-Process | Select-Object -first 5 Id, ProcessName, WS | Sort-Object WS -Descending
4 – Stop-Process
O cmdlet Stop-Process é usado para matar processos, ou seja, para finalizar uma aplicação. Normalmente é usado em casos em que o Gerenciador de Tarefas pára de responder ou simplesmente se nega a finalizar um processo. Veja alguns exemplos:
<# finalizar processos por nome - caractere curinga para finalizar múltiplos processo considerando o nome #>
Stop-Process -Name fire*
<# finalizar processos por id #>
Stop-Process -Id 4455
5 – Invoke-WebRequest
Esse cmdlet faz requisições HTTP e HTTPS para um servidores web, faz o parse na resposta e retorna uma coleção de elementos como links, imagens e outros elementos típicos de uma página HTML. É muito útil para testar requisições e verificar suas respostas.
No exemplo a seguir fazemos uma simples requisição HTTP ao servidor JSON Placeholder, que fornece uma API Fake, com diversos dados fictícios para teste.
<# fazendo uma simples requisição #>
Invoke-WebRequest https://jsonplaceholder.typicode.com/comments
Esse comando deve retornar algo parecido com a imagem a seguir, mostrando informações gerais sobre a requisição:

Para exibir o conteúdo da resposta (propriedade Content), precisamos armazenar o resultado da requisição em uma variável e depois direcionar a saída para um arquivo com o cmdlet
<# armazena o resultado da requisição na variável result #>
$result = Invoke-WebRequest https://jsonplaceholder.typicode.com/comments
<# Pega o conteúdo (propriedade Content) e direciona para um arquivo .json #>
$result.Content | Out-File .\content.json
Também é possível converter o conteúdo JSON para um formato mais legível. Veja:
<# usando o cmdlet ConvertFrom-Json #>
$output = ConvertFrom-Json $content.Content
BÔNUS: comandos com múltiplas linhas
Quando precisamos usar comandos extremamente longos, é recomendável quebrar a linha para que eles se tornem mais legíveis e mais fáceis de copiar. Para isso, basta usar o caractere ` (backtick). Veja o exemplo a seguir:
Get-Process | Select-Object -first 5 Id, ProcessName, WS `
| Sort-Object WS -Descending

Conclusão
O PowerShell é aquela ferramenta extremamente útil para diversos tipos de usuários, principalmente desenvolvedores. O domínio dessa ferramenta permite interagir de maneira rápida com o Sistema Operacional, principalmente o Windows, já que o PowerShell também é disponibilizado para Linux.
Com o PowerShell ganhamos mais produtividade e mais liberdade em diversos tipos de ambientes de desenvolvimento de software.
Se você já conhece a ferramenta, comente quais outros comandos você acha útil. Se não conhece, corra para aprender!
Até o próximo post! 😎👍
Para saber como criar um backup automatizado usando Power Shell em ambientes Windows, clique aqui!