Guia completo de PowerShell para automação e administração Windows
📖 Definição
PowerShell é uma plataforma de automação e configuração da Microsoft, composta por um shell de linha de comando e uma linguagem de script. É a ferramenta padrão para administração de sistemas Windows e ambientes de nuvem Microsoft.
💪 Por que aprender?
• Orientado a objetos
• Cross-platform (Windows, Linux, macOS)
• Integração com .NET
• Pipeline poderoso
• Extensível com módulos
🚀 O que você pode fazer?
• Administração de sistemas Windows
• Automação de tarefas repetitivas
• Gerenciamento de Active Directory
• Configuração de nuvem Azure
• DevOps e CI/CD
AD, GPO, Serviços
Azure, Office 365
CI/CD, Automação
PowerShell 7+, Core
🟢 Comandos Básicos
Use quando: Começando com PowerShell, navegação básica, informações do sistema
📋Navegação
Get-Location# Mostra diretório atual (pwd)
Set-Location C:\Users# Navega para diretório (cd)
Get-ChildItem# Lista arquivos (ls)
Get-ChildItem -Force# Inclui arquivos ocultos
Get-ChildItem -Recurse# Lista recursivo
📋Informações do Sistema
Get-ComputerInfo# Informações do sistema
Get-Process# Lista processos
Get-Service# Lista serviços
Get-EventLog -LogName Application# Logs de aplicação
Get-HotFix# Updates instalados
📋Ajuda e Documentação
Get-Help Get-Process# Ajuda do comando
Get-Command Get-Process# Informações do comando
Update-Help# Atualiza ajuda
Get-Module -ListAvailable# Módulos disponíveis
📁 Gerenciamento de Arquivos
Use quando: Manipulação de arquivos e diretórios, backup, organização
📋Criação e Remoção
New-Item -Path "arquivo.txt" -ItemType File# Criar arquivo
New-Item -Path "pasta" -ItemType Directory# Criar pasta
Remove-Item "arquivo.txt"# Remover arquivo
Remove-Item "pasta" -Recurse# Remover pasta
Remove-Item "arquivo.txt" -Force# Forçar remoção
📋Cópia e Movimentação
Copy-Item "origem.txt" "destino.txt"# Copiar arquivo
Copy-Item "pasta" "destino" -Recurse# Copiar pasta
Move-Item "antigo.txt" "novo.txt"# Mover/renomear
Rename-Item "antigo.txt" "novo.txt"# Renomear
📋Leitura e Escrita
Get-Content "arquivo.txt"# Ler conteúdo
Get-Content "arquivo.txt" | Select-Object -First 10# Primeiras 10 linhas
Set-Content "arquivo.txt" "conteúdo"# Escrever arquivo
Add-Content "arquivo.txt" "mais conteúdo"# Adicionar conteúdo
Out-File "saida.txt"# Redirecionar saída
🔤 Variáveis e Tipos
Use quando: Armazenando dados, manipulação de variáveis, estruturas de dados
📋Declaração de Variáveis
$nome = "João"# String
$idade = 25# Inteiro
$altura = 1.75# Decimal
$ativo = $true# Booleano
$dados = $null# Nulo
📋Arrays e Listas
$lista = @("item1", "item2", "item3")# Array de strings
$numeros = 1..10# Array de números
$lista[0]# Acessar elemento
$lista[-1]# Último elemento
$lista.Count# Tamanho do array
$lista += "novo"# Adicionar elemento
📋Hash Tables (Dicionários)
$pessoa = @{Nome="João"; Idade=25}# Criar hashtable
$pessoa.Nome# Acessar por ponto
$pessoa["Nome"]# Acessar por chave
$pessoa.Cidade = "São Paulo"# Adicionar propriedade
$pessoa.Keys# Listar chaves
$pessoa.Values# Listar valores
🔀 Estruturas de Controle
Use quando: Controlando fluxo do script, repetições, decisões lógicas
📋If/Else
if ($idade -ge 18) {
Write-Host "Maior de idade"
} else {
Write-Host "Menor de idade"
}# Condicional simples
if ($nota -ge 7) {
Write-Host "Aprovado"
} elseif ($nota -ge 5) {
Write-Host "Recuperação"
} else {
Write-Host "Reprovado"
}# Múltiplas condições
📋Loops For
for ($i = 1; $i -le 10; $i++) {
Write-Host $i
}# Loop for tradicional
foreach ($item in $lista) {
Write-Host $item
}# Loop foreach
foreach ($arquivo in Get-ChildItem) {
Write-Host $arquivo.Name
}# Iterar arquivos
📋Loops While
$contador = 0
while ($contador -lt 5) {
Write-Host $contador
$contador++
}# Loop while
do {
$resposta = Read-Host "Digite 'sair' para parar"
} while ($resposta -ne "sair")# Loop do-while
📋Switch
switch ($opcao) {
1 { Write-Host "Opção 1" }
2 { Write-Host "Opção 2" }
default { Write-Host "Opção inválida" }
}# Switch case
⚡ Funções e Scripts
Use quando: Automatizando tarefas, criando scripts, organização de código
📋Definição de Funções
function Saudar($nome) {
param([string]$nome)
Write-Host "Olá, $nome!"
}# Função simples
function Calcular-Area($base, $altura) {
param([double]$base, [double]$altura)
return ($base * $altura) / 2
}# Com parâmetros tipados
function Testar-Conexao {
param([string]$servidor = "localhost")
Test-Connection $servidor
}# Com parâmetro padrão
📋Parâmetros Avançados
function Processar-Arquivos {
param(
[Parameter(Mandatory=$true)]
[string]$Caminho,
[Parameter()]
[switch]$Recurse
)
# Código da função
}# Parâmetros avançados
function Exportar-Dados {
param(
[Parameter(ValueFromPipeline=$true)]
[object[]]$Dados
)
$Dados | Export-Csv -Path "saida.csv"
}# Aceita pipeline
📋Módulos e Scripts
. .\meu-script.ps1# Importar script
Import-Module .\meu-modulo.psm1# Importar módulo
Export-ModuleMember -Function MinhaFuncao# Exportar função
$PSVersionTable# Versão do PowerShell
🔄 Pipeline e Operadores
Use quando: Processamento de dados, filtragem, transformação de objetos
📋Pipeline Básico
Get-Process | Where-Object {$_.CPU -gt 100}# Filtrar processos
Get-ChildItem | Where-Object {$_.Extension -eq ".txt"}# Filtrar arquivos
Get-Service | Where-Object {$_.Status -eq "Running"}# Filtrar serviços
Get-Process | Sort-Object CPU -Descending# Ordenar
📋Operadores de Comparação
$a -eq $b# Igual
$a -ne $b# Diferente
$a -gt $b# Maior que
$a -ge $b# Maior ou igual
$a -lt $b# Menor que
$a -le $b# Menor ou igual
$a -like "*texto*"# Like (contém)
$a -match "regex"# Match regex
📋Operadores Lógicos
$a -and $b# E lógico
$a -or $b# Ou lógico
-not $a# Negação
$a -xor $b# OU exclusivo
📋Select-Object
Get-Process | Select-Object Name, CPU, Memory# Selecionar propriedades
Get-Process | Select-Object -First 10# Primeiros 10
Get-Process | Select-Object -Last 5# Últimos 5
Get-Process | Select-Object -Unique# Remover duplicatas
⚙️ Gerenciamento de Processos
Use quando: Gerenciamento de sistema, troubleshooting, automação
📋Listar e Monitorar
Get-Process# Todos processos
Get-Process -Name "chrome"# Processo específico
Get-Process | Where-Object {$_.CPU -gt 100}# Processos intensivos
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10# Top 10 CPU
📋Iniciar e Parar
Start-Process notepad.exe# Iniciar processo
Start-Process chrome.exe "https://google.com"# Com parâmetro
Stop-Process -Name "notepad"# Parar por nome
Stop-Process -Id 1234# Parar por ID
Stop-Process -Name "chrome" -Force# Forçar parada
📋Gerenciar Serviços
Get-Service# Listar serviços
Get-Service -Name "Spooler"# Serviço específico
Start-Service -Name "Spooler"# Iniciar serviço
Stop-Service -Name "Spooler"# Parar serviço
Restart-Service -Name "Spooler"# Reiniciar serviço
🌐 Rede e Conectividade
Use quando: Configuração de rede, diagnóstico, automação web
📋Informações de Rede
Get-NetAdapter# Adaptadores de rede
Get-NetIPAddress# Endereços IP
Get-NetRoute# Tabela de rotas
Test-Connection google.com# Testar conectividade
Test-NetConnection google.com -Port 80# Testar porta
📋Configuração de Rede
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.100 -PrefixLength 24# Configurar IP
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 8.8.8.8# Configurar DNS
Get-NetFirewallRule# Regras firewall
New-NetFirewallRule -DisplayName "Permitir RDP" -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow# Criar regra
📋HTTP e Web
Invoke-WebRequest https://api.example.com# Requisição HTTP
Invoke-RestMethod https://api.example.com/data# API REST
$response = Invoke-WebRequest https://example.com
$response.Content# Obter conteúdo
Invoke-WebRequest https://example.com -OutFile "pagina.html"# Download
👥 Active Directory
Use quando: Administração de domínio, gerenciamento de usuários, auditoria
📋Gerenciamento de Usuários
Get-ADUser -Filter *# Listar usuários
Get-ADUser -Identity "joao.silva"# Usuário específico
New-ADUser -Name "novo.usuario" -SamAccountName "novo.usuario"# Criar usuário
Set-ADUser -Identity "joao.silva" -Department "TI"# Modificar usuário
Disable-ADAccount -Identity "joao.silva"# Desabilitar conta
📋Gerenciamento de Grupos
Get-ADGroup -Filter *# Listar grupos
Get-ADGroupMember "TI"# Membros do grupo
Add-ADGroupMember -Identity "TI" -Members "joao.silva"# Adicionar ao grupo
Remove-ADGroupMember -Identity "TI" -Members "joao.silva"# Remover do grupo
📋Consultas e Relatórios
Search-ADAccount -AccountDisabled# Contas desabilitadas
Get-ADUser -Filter {PasswordNeverExpires -eq $true}# Senhas que não expiram
Get-ADUser -Filter {LastLogonDate -lt (Get-Date).AddDays(-90)}# Inativos 90 dias
Get-ADUser -Properties * | Export-Csv "usuarios.csv"# Exportar para CSV
🔒 Segurança e Permissões
Use quando: Scripts seguros, administração de permissões, conformidade
📋Políticas de Execução
Get-ExecutionPolicy# Ver política atual
Set-ExecutionPolicy RemoteSigned# Definir política
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass# Bypass temporário
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned# Para usuário atual
📋Certificados e Assinatura
Get-ChildItem Cert:\CurrentUser\My# Certificados usuário
Get-AuthenticodeSignature "script.ps1"# Verificar assinatura
Set-AuthenticodeSignature -FilePath "script.ps1" -Certificate $cert# Assinar script
📋Permissões de Arquivos
Get-Acl "C:\pasta"# Ver permissões
$acl = Get-Acl "C:\pasta"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Usuario","FullControl","Allow")
$acl.SetAccessRule($accessRule)
Set-Acl "C:\pasta" $acl# Definir permissão
Get-Acl "arquivo.txt" | Format-List# Permissões detalhadas
⏰ Automação e Agendamento
Use quando: Automação de tarefas, processos em background, agendamento
📋Tarefas Agendadas
Get-ScheduledTask# Listar tarefas
Register-ScheduledTask -Action (New-ScheduledTaskAction -Execute "notepad.exe") -Trigger (New-ScheduledTaskTrigger -Daily -At 9am)# Criar tarefa
Start-ScheduledTask -TaskName "MinhaTarefa"# Iniciar tarefa
Disable-ScheduledTask -TaskName "MinhaTarefa"# Desabilitar tarefa
Unregister-ScheduledTask -TaskName "MinhaTarefa"# Remover tarefa
📋Jobs em Background
Start-Job -ScriptBlock { Get-Process }# Iniciar job
Get-Job# Listar jobs
Receive-Job -Id 1# Obter resultado
Stop-Job -Id 1# Parar job
Remove-Job -Id 1# Remover job
📋Workflows
workflow MeuWorkflow {
parallel {
Get-Process
Get-Service
}
sequence {
Write-Host "Concluído"
}
}# Workflow básico
🖥️ WMI e CIM
Use quando: Monitoramento de sistema, inventário de hardware, diagnóstico
📋Consultas WMI
Get-WmiObject -Class Win32_OperatingSystem# Info do SO
Get-WmiObject -Class Win32_ComputerSystem# Info do hardware
Get-WmiObject -Class Win32_Processor# Info da CPU
Get-WmiObject -Class Win32_LogicalDisk# Info dos discos
📋Consultas CIM
Get-CimInstance -ClassName Win32_OperatingSystem# CIM moderno
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'chrome.exe'"# Query CIM
New-CimSession -ComputerName servidor# Sessão remota
Get-CimInstance -CimSession $session -ClassName Win32_Service# Consulta remota
📋Monitoramento
Get-EventLog -LogName System -Newest 10# Logs do sistema
Get-WinEvent -FilterHashtable @{LogName='Application'; Level=2}# Eventos de erro
Get-Counter "\Processor(_Total)\% Processor Time"# Contador de performance
🤝 Contribuindo
Encontrou um erro? Quer melhorar um cheatsheet? Tem uma sugestão? Adoraríamos suas contribuições! Abra uma issue ou submeta um PR.
Gostou do projeto? Apoie o desenvolvimento com um café e ajude a manter tudo open source ☕