PowerShell: Automatize o Chato e Vá para Casa Cedo
A GUI é para amadores. Domine os One-Liners e Pipelines que gerenciam 100 servidores simultaneamente. Pare de clicar em janelas e comece a tratar sua infraestrutura como código. Active Directory, WMI e processos em lote sem dor.
Seções12
🟢 Comandos Básicos
14 snippetsFundamentos para iniciar e interagir com o ambiente PowerShell, incluindo navegação no sistema de arquivos, obtenção de informações essenciais e acesso à documentação.
Get-Location
Exibe o caminho completo do diretório de trabalho atual, funcionando como o comando `pwd` (print working directory) em sistemas baseados em Unix/Linux.
Get-LocationSet-Location
Muda o diretório de trabalho atual para o caminho especificado. Equivalente ao comando `cd` (change directory). Pode ser usado com caminhos absolutos ou relativos.
Set-Location C:\UsersGet-ChildItem
Lista os arquivos e subdiretórios no diretório atual ou no caminho especificado. Similar ao comando `ls` em sistemas Unix/Linux ou `dir` no prompt de comando do Windows.
Get-ChildItemGet-ChildItem -Force
Lista arquivos e diretórios, incluindo itens ocultos e de sistema que normalmente são omitidos. O parâmetro `-Force` é crucial para revelar esses itens.
Get-ChildItem -ForceGet-ChildItem -Recurse
Lista os arquivos e diretórios de forma recursiva, percorrendo todos os subdiretórios a partir do caminho especificado. Útil para explorar a estrutura completa de uma pasta.
Get-ChildItem -RecurseGet-ComputerInfo
Coleta e exibe informações detalhadas sobre o sistema operacional e o hardware do computador local, como versão do SO, fabricante, modelo, memória RAM e processador.
Get-ComputerInfoGet-Process
Lista todos os processos em execução no sistema, fornecendo detalhes como ID do processo (PID), nome, utilização de CPU e memória. Essencial para monitoramento e diagnóstico.
Get-ProcessGet-Service
Exibe uma lista de todos os serviços instalados no sistema, mostrando seu status (em execução, parado, etc.) e nome de exibição. Fundamental para gerenciamento de serviços.
Get-ServiceGet-EventLog -LogName Application
Recupera eventos de um log de eventos específico. Neste exemplo, ele lista os eventos do log de Aplicação, que registra eventos gerados por aplicativos e programas.
Get-EventLog -LogName ApplicationGet-HotFix
Lista todas as atualizações (hotfixes) instaladas no sistema operacional Windows, incluindo o ID da atualização, quem a instalou e a data de instalação.
Get-HotFixGet-Help
Fornece informações detalhadas sobre um cmdlet ou função específica. Use `-Full` para todos os detalhes, `-Examples` para exemplos de uso e `-Online` para abrir a documentação online.
Get-Help Get-ProcessGet-Command
Exibe informações sobre cmdlets, funções, aliases e scripts disponíveis no PowerShell. Útil para descobrir comandos e entender seus parâmetros.
Get-Command Get-ProcessUpdate-Help
Baixa e instala os arquivos de ajuda mais recentes para os módulos do PowerShell. É recomendado executar este comando regularmente para ter acesso à documentação atualizada.
Update-HelpGet-Module -ListAvailable
Lista todos os módulos do PowerShell que estão disponíveis no sistema, incluindo aqueles que ainda não foram carregados na sessão atual.
Get-Module -ListAvailable📁 Gerenciamento de Arquivos
14 snippetsComandos essenciais para criar, remover, copiar, mover, renomear e manipular o conteúdo de arquivos e diretórios no sistema de arquivos.
New-Item (File)
Cria um novo arquivo no caminho especificado. O parâmetro `-ItemType File` indica que um arquivo deve ser criado.
New-Item -Path "arquivo.txt" -ItemType FileNew-Item (Directory)
Cria um novo diretório (pasta) no caminho especificado. O parâmetro `-ItemType Directory` indica que um diretório deve ser criado.
New-Item -Path "pasta" -ItemType DirectoryRemove-Item (File)
Exclui um arquivo específico. Por padrão, ele solicitará confirmação antes de remover o item.
Remove-Item "arquivo.txt"Remove-Item (Directory)
Exclui um diretório e todo o seu conteúdo (subdiretórios e arquivos). O parâmetro `-Recurse` é obrigatório para remover diretórios não vazios.
Remove-Item "pasta" -RecurseRemove-Item -Force
Força a remoção de um arquivo ou diretório, ignorando avisos e prompts de confirmação, mesmo que o item esteja em uso ou seja somente leitura. Use com cautela.
Remove-Item "arquivo.txt" -ForceCopy-Item (File)
Copia um arquivo de um local para outro. Se o destino for um nome de arquivo, ele será copiado com esse novo nome. Se for um diretório, o arquivo manterá seu nome original.
Copy-Item "origem.txt" "destino.txt"Copy-Item (Directory)
Copia um diretório e todo o seu conteúdo (subdiretórios e arquivos) para um novo local. O parâmetro `-Recurse` é necessário para copiar diretórios completos.
Copy-Item "pasta" "destino" -RecurseMove-Item
Move um arquivo ou diretório de um local para outro. Pode ser usado também para renomear um item, movendo-o para o mesmo diretório com um novo nome.
Move-Item "antigo.txt" "novo.txt"Rename-Item
Renomeia um arquivo ou diretório sem alterar seu local. O primeiro argumento é o caminho do item atual, e o segundo é o novo nome.
Rename-Item "antigo.txt" "novo.txt"Get-Content
Lê o conteúdo de um arquivo de texto e o exibe na console ou o passa para o pipeline para processamento posterior. Útil para visualizar logs ou dados.
Get-Content "arquivo.txt"Get-Content (Primeiras Linhas)
Lê o conteúdo de um arquivo e, usando o pipeline com `Select-Object -First`, exibe apenas as primeiras 10 linhas, útil para arquivos grandes.
Get-Content "arquivo.txt" | Select-Object -First 10Set-Content
Escreve ou sobrescreve o conteúdo de um arquivo. Se o arquivo não existir, ele será criado. Se existir, seu conteúdo anterior será totalmente substituído.
Set-Content "arquivo.txt" "conteúdo"Add-Content
Adiciona conteúdo ao final de um arquivo existente. Se o arquivo não existir, ele será criado. Preserva o conteúdo anterior do arquivo.
Add-Content "arquivo.txt" "mais conteúdo"Out-File
Redireciona a saída de um comando para um arquivo. Por exemplo, `Get-Process | Out-File "processos.txt"` salvaria a lista de processos no arquivo.
Out-File "saida.txt"🔤 Variáveis e Tipos
17 snippetsComo declarar variáveis, manipular diferentes tipos de dados como strings, inteiros, booleanos, e utilizar estruturas de coleção como arrays e hash tables.
Variável String
Declara uma variável `$nome` e atribui a ela um valor do tipo string (texto). Variáveis no PowerShell começam com `$`.
$nome = "João"Variável Inteiro
Declara uma variável `$idade` e atribui a ela um valor do tipo inteiro (número sem casas decimais).
$idade = 25Variável Decimal
Declara uma variável `$altura` e atribui a ela um valor do tipo decimal (número com casas decimais).
$altura = 1.75Variável Booleano
Declara uma variável `$ativo` e atribui a ela um valor booleano, que pode ser `$true` (verdadeiro) ou `$false` (falso).
$ativo = $trueVariável Nulo
Declara uma variável `$dados` e atribui a ela o valor `$null`, indicando a ausência de um valor ou objeto.
$dados = $nullArray de Strings
Cria um array (lista ordenada) de strings. O operador `@()` é usado para definir um array literal.
$lista = @("item1", "item2", "item3")Array de Números (Range)
Cria um array de números inteiros de 1 a 10 usando o operador de range (`..`).
$numeros = 1..10Acessar Elemento do Array
Acessa um elemento específico de um array usando seu índice (posição). O PowerShell usa indexação baseada em zero, então `[0]` acessa o primeiro elemento.
$lista[0]Último Elemento do Array
Acessa o último elemento de um array usando indexação negativa. `-1` refere-se ao último elemento, `-2` ao penúltimo, e assim por diante.
$lista[-1]Tamanho do Array
Retorna o número de elementos (tamanho) de um array usando a propriedade `.Count`.
$lista.CountAdicionar Elemento ao Array
Adiciona um novo elemento ao final de um array. Note que isso cria um novo array com o elemento adicionado, não modifica o array original in-place.
$lista += "novo"Criar Hashtable
Cria uma hashtable (dicionário ou mapa), que é uma coleção de pares chave-valor. As chaves são únicas e os valores podem ser de qualquer tipo.
$pessoa = @{Nome="João"; Idade=25}Acessar Hashtable por Ponto
Acessa o valor associado a uma chave em uma hashtable usando a notação de ponto, se a chave for um nome de propriedade válido.
$pessoa.NomeAcessar Hashtable por Chave
Acessa o valor associado a uma chave em uma hashtable usando a notação de colchetes e o nome da chave como string. Funciona para qualquer chave, incluindo aquelas com caracteres especiais.
$pessoa["Nome"]Adicionar Propriedade à Hashtable
Adiciona uma nova chave-valor a uma hashtable existente ou atualiza o valor de uma chave existente.
$pessoa.Cidade = "São Paulo"Listar Chaves da Hashtable
Retorna uma coleção de todas as chaves presentes na hashtable.
$pessoa.KeysListar Valores da Hashtable
Retorna uma coleção de todos os valores presentes na hashtable.
$pessoa.Values🔀 Estruturas de Controle
8 snippetsComandos para controlar o fluxo de execução de scripts, permitindo a tomada de decisões condicionais e a repetição de blocos de código.
If/Else Simples
Executa um bloco de código se uma condição for verdadeira (`if`) e outro bloco se a condição for falsa (`else`). O operador `-ge` significa "maior ou igual a".
if ($idade -ge 18) {
Write-Host "Maior de idade"
} else {
Write-Host "Menor de idade"
}If/Elseif/Else Múltiplo
Permite testar múltiplas condições em sequência. O bloco `elseif` é executado se a condição anterior for falsa e sua própria condição for verdadeira.
if ($nota -ge 7) {
Write-Host "Aprovado"
} elseif ($nota -ge 5) {
Write-Host "Recuperação"
} else {
Write-Host "Reprovado"
}Loop For Tradicional
Executa um bloco de código um número especificado de vezes. Consiste em uma inicialização, uma condição de término e uma expressão de incremento/decremento.
for ($i = 1; $i -le 10; $i++) {
Write-Host $i
}Loop Foreach
Itera sobre cada item em uma coleção (como um array ou o resultado de um cmdlet), executando um bloco de código para cada item.
foreach ($item in $lista) {
Write-Host $item
}Loop Foreach (Iterar Arquivos)
Demonstra o uso do `foreach` para iterar sobre os objetos retornados por `Get-ChildItem`, exibindo o nome de cada arquivo ou diretório.
foreach ($arquivo in Get-ChildItem) {
Write-Host $arquivo.Name
}Loop While
Executa um bloco de código repetidamente enquanto uma condição especificada for verdadeira. A condição é avaliada antes de cada iteração.
$contador = 0
while ($contador -lt 5) {
Write-Host $contador
$contador++
}Loop Do-While
Executa um bloco de código pelo menos uma vez e, em seguida, repete enquanto uma condição especificada for verdadeira. A condição é avaliada após cada iteração.
do {
$resposta = Read-Host "Digite 'sair' para parar"
} while ($resposta -ne "sair")Switch Case
Permite comparar um valor com múltiplos padrões e executar um bloco de código correspondente ao primeiro padrão que corresponder. O bloco `default` é executado se nenhuma correspondência for encontrada.
switch ($opcao) {
1 { Write-Host "Opção 1" }
2 { Write-Host "Opção 2" }
default { Write-Host "Opção inválida" }
}⚡ Funções e Scripts
9 snippetsCriação e utilização de funções para modularizar o código, definir parâmetros avançados e organizar scripts em módulos para reuso e automação.
Função Simples
Define uma função chamada `Saudar` que aceita um parâmetro `$nome` do tipo string e exibe uma saudação personalizada.
function Saudar($nome) {
param([string]$nome)
Write-Host "Olá, $nome!"
}Função com Parâmetros Tipados
Define uma função que calcula a área de um triângulo, especificando os tipos de dados (`[double]`) para os parâmetros `$base` e `$altura` e retornando um valor.
function Calcular-Area($base, $altura) {
param([double]$base, [double]$altura)
return ($base * $altura) / 2
}Função com Parâmetro Padrão
Define uma função onde o parâmetro `$servidor` tem um valor padrão de "localhost". Se o usuário não fornecer um valor para `$servidor`, o padrão será usado.
function Testar-Conexao {
param([string]$servidor = "localhost")
Test-Connection $servidor
}Parâmetros Avançados
Exemplo de como usar atributos de parâmetro avançados: `Mandatory=$true` torna o parâmetro `$Caminho` obrigatório, e `[switch]$Recurse` cria um parâmetro booleano sem a necessidade de um valor.
function Processar-Arquivos {
param(
[Parameter(Mandatory=$true)]
[string]$Caminho,
[Parameter()]
[switch]$Recurse
)
# Código da função
}Parâmetro que Aceita Pipeline
Demonstra um parâmetro que pode receber entrada do pipeline (`ValueFromPipeline=$true`). Isso permite que a função processe objetos que são passados de outros cmdlets.
function Exportar-Dados {
param(
[Parameter(ValueFromPipeline=$true)]
[object[]]$Dados
)
$Dados | Export-Csv -Path "saida.csv"
}Importar Script
Executa um script PowerShell no escopo da sessão atual. O ponto (`.`) e o espaço são essenciais para que as variáveis e funções definidas no script fiquem disponíveis na sessão.
. .\meu-script.ps1Importar Módulo
Carrega um módulo PowerShell na sessão atual, tornando seus cmdlets, funções e variáveis disponíveis. Módulos são a forma preferencial de organizar e distribuir código PowerShell.
Import-Module .\meu-modulo.psm1Exportar Função de Módulo
Especifica quais funções, cmdlets, variáveis ou aliases de um módulo devem ser exportados e tornados públicos para uso por outras sessões após a importação do módulo.
Export-ModuleMember -Function MinhaFuncao$PSVersionTable
Uma variável automática que exibe detalhes sobre a versão do PowerShell, a edição, a versão do .NET Framework e outras informações do ambiente de execução.
$PSVersionTable🔄 Pipeline e Operadores
20 snippetsAproveite o poder do pipeline do PowerShell para encadear comandos e usar operadores de comparação e lógicos para filtrar e manipular dados de forma eficiente.
Filtrar Processos por CPU
Obtém todos os processos e, via pipeline (`|`), filtra-os usando `Where-Object` para selecionar apenas aqueles cuja utilização de CPU (`$_.CPU`) é maior que 100 segundos.
Get-Process | Where-Object {$_.CPU -gt 100}Filtrar Arquivos por Extensão
Lista todos os itens no diretório atual e filtra-os para exibir apenas aqueles que têm a extensão ".txt" (`$_.Extension -eq ".txt"`).
Get-ChildItem | Where-Object {$_.Extension -eq ".txt"}Filtrar Serviços em Execução
Obtém todos os serviços e filtra-os para mostrar apenas aqueles cujo status (`$_.Status`) é "Running" (em execução).
Get-Service | Where-Object {$_.Status -eq "Running"}Ordenar Processos por CPU
Lista todos os processos e os ordena com base na utilização da CPU (`CPU`), em ordem decrescente (`-Descending`), mostrando os processos mais intensivos primeiro.
Get-Process | Sort-Object CPU -DescendingOperador -eq (Igual)
Operador de comparação que verifica se dois valores são iguais. Retorna `$true` se forem iguais, `$false` caso contrário.
$a -eq $bOperador -ne (Diferente)
Operador de comparação que verifica se dois valores são diferentes. Retorna `$true` se forem diferentes, `$false` caso contrário.
$a -ne $bOperador -gt (Maior que)
Operador de comparação que verifica se o valor à esquerda é estritamente maior que o valor à direita.
$a -gt $bOperador -ge (Maior ou Igual)
Operador de comparação que verifica se o valor à esquerda é maior ou igual ao valor à direita.
$a -ge $bOperador -lt (Menor que)
Operador de comparação que verifica se o valor à esquerda é estritamente menor que o valor à direita.
$a -lt $bOperador -le (Menor ou Igual)
Operador de comparação que verifica se o valor à esquerda é menor ou igual ao valor à direita.
$a -le $bOperador -like (Contém Wildcard)
Operador de comparação que usa curingas (wildcards) como `*` e `?` para encontrar padrões em strings. Retorna `$true` se a string `$a` contiver "texto".
$a -like "*texto*"Operador -match (Regex)
Operador de comparação que usa expressões regulares (regex) para encontrar padrões em strings. Retorna `$true` se a string `$a` corresponder ao padrão regex.
$a -match "regex"Operador -and (E Lógico)
Operador lógico que retorna `$true` se ambas as expressões `$a` e `$b` forem verdadeiras. Caso contrário, retorna `$false`.
$a -and $bOperador -or (Ou Lógico)
Operador lógico que retorna `$true` se pelo menos uma das expressões `$a` ou `$b` for verdadeira. Retorna `$false` apenas se ambas forem falsas.
$a -or $bOperador -not (Negação)
Operador lógico que inverte o valor booleano de uma expressão. Se `$a` for `$true`, `-not $a` será `$false`, e vice-versa.
-not $aOperador -xor (OU Exclusivo)
Operador lógico que retorna `$true` se apenas uma das expressões `$a` ou `$b` for verdadeira, mas não ambas. Retorna `$false` se ambas forem verdadeiras ou ambas falsas.
$a -xor $bSelect-Object (Propriedades)
Seleciona propriedades específicas de objetos no pipeline. Neste exemplo, ele exibe apenas o nome, CPU e memória de cada processo.
Get-Process | Select-Object Name, CPU, MemorySelect-Object -First
Seleciona apenas os primeiros `N` objetos do pipeline. Útil para limitar a saída ou obter amostras de dados.
Get-Process | Select-Object -First 10Select-Object -Last
Seleciona apenas os últimos `N` objetos do pipeline. Útil para ver os itens mais recentes ou finais de uma lista.
Get-Process | Select-Object -Last 5Select-Object -Unique
Remove objetos duplicados do pipeline, garantindo que cada objeto na saída seja único. Útil para obter uma lista distinta de valores.
Get-Process | Select-Object -Unique⚙️ Gerenciamento de Processos
14 snippetsComandos para listar, monitorar, iniciar e encerrar processos e serviços no sistema operacional Windows, fundamental para administração e troubleshooting.
Get-Process (Todos)
Lista todos os processos atualmente em execução no sistema, fornecendo informações como ID, nome, CPU e memória utilizada.
Get-ProcessGet-Process (Específico)
Obtém informações sobre processos com um nome específico. Pode-se usar curingas, como `"chrome*"` para todos os processos que começam com "chrome".
Get-Process -Name "chrome"Get-Process (Intensivos)
Filtra e exibe processos que consumiram mais de 100 segundos de tempo de CPU, ajudando a identificar processos que estão sobrecarregando o sistema.
Get-Process | Where-Object {$_.CPU -gt 100}Top 10 Processos por CPU
Lista os 10 processos que mais consomem CPU, ordenados em ordem decrescente. Útil para identificar gargalos de desempenho.
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10Start-Process (Sem Parâmetros)
Inicia um novo processo no sistema. Neste exemplo, ele abre o Bloco de Notas.
Start-Process notepad.exeStart-Process (Com Parâmetro)
Inicia um processo e passa argumentos para ele. Aqui, o Chrome é aberto e navega diretamente para google.com.
Start-Process chrome.exe "https://google.com"Stop-Process (Por Nome)
Encerra um processo com um nome específico. Por padrão, ele solicitará confirmação. Use `-Force` para forçar o encerramento.
Stop-Process -Name "notepad"Stop-Process (Por ID)
Encerra um processo usando seu ID (PID) exclusivo. Este método é mais preciso do que usar o nome, especialmente quando há múltiplos processos com o mesmo nome.
Stop-Process -Id 1234Stop-Process -Force
Força o encerramento de um processo pelo nome, ignorando prompts de confirmação e tentativas de encerramento gracioso. Use com cautela, pois pode resultar em perda de dados.
Stop-Process -Name "chrome" -ForceGet-Service (Todos)
Lista todos os serviços instalados no sistema, incluindo seu status atual (em execução, parado) e nome de exibição.
Get-ServiceGet-Service (Específico)
Obtém informações sobre um serviço específico pelo seu nome. Útil para verificar o status ou propriedades de um serviço individual.
Get-Service -Name "Spooler"Start-Service
Inicia um serviço parado. O serviço "Spooler" é o serviço de Spooler de Impressão do Windows.
Start-Service -Name "Spooler"Stop-Service
Para um serviço em execução. Por padrão, ele solicitará confirmação. Use `-Force` para forçar a parada.
Stop-Service -Name "Spooler"Restart-Service
Reinicia um serviço, primeiro parando-o e depois iniciando-o novamente. Útil para aplicar configurações ou resolver problemas temporários.
Restart-Service -Name "Spooler"🌐 Rede e Conectividade
13 snippetsComandos para diagnosticar, configurar e interagir com a rede, incluindo adaptadores de rede, endereços IP, firewall e requisições HTTP/REST.
Get-NetAdapter
Lista todos os adaptadores de rede instalados no sistema, fornecendo informações como nome, status, velocidade e tipo de mídia.
Get-NetAdapterGet-NetIPAddress
Exibe os endereços IP (IPv4 e IPv6) configurados em cada adaptador de rede, juntamente com o prefixo de sub-rede e o gateway padrão.
Get-NetIPAddressGet-NetRoute
Exibe a tabela de rotas IP do sistema, mostrando como o tráfego de rede é direcionado para diferentes destinos.
Get-NetRouteTest-Connection
Envia pacotes ICMP (ping) para um host remoto para verificar a conectividade de rede. Retorna detalhes sobre o tempo de resposta e o status da conexão.
Test-Connection google.comTest-NetConnection
Testa a conectividade de rede para um host e porta específicos. Útil para verificar se um serviço está acessível em uma porta, como HTTP (porta 80).
Test-NetConnection google.com -Port 80New-NetIPAddress
Configura um novo endereço IP estático em um adaptador de rede. `-InterfaceAlias` especifica o adaptador, `-IPAddress` o endereço e `-PrefixLength` a máscara de sub-rede.
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.100 -PrefixLength 24Set-DnsClientServerAddress
Define os endereços dos servidores DNS para um adaptador de rede específico. Neste exemplo, ele configura o DNS primário para o DNS público do Google.
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 8.8.8.8Get-NetFirewallRule
Lista todas as regras do Firewall do Windows Defender, incluindo regras de entrada e saída, programas e portas afetadas.
Get-NetFirewallRuleNew-NetFirewallRule
Cria uma nova regra de firewall. Este exemplo cria uma regra de entrada para permitir conexões RDP (porta TCP 3389).
New-NetFirewallRule -DisplayName "Permitir RDP" -Direction Inbound -Protocol TCP -LocalPort 3389 -Action AllowInvoke-WebRequest
Envia uma requisição HTTP/HTTPS para um recurso web. Retorna um objeto que contém o status, cabeçalhos e conteúdo da resposta. Útil para interagir com APIs ou baixar páginas.
Invoke-WebRequest https://api.example.comInvoke-RestMethod
Envia uma requisição HTTP/HTTPS e converte a resposta (geralmente JSON ou XML) diretamente em um objeto PowerShell, facilitando a manipulação de dados de APIs RESTful.
Invoke-RestMethod https://api.example.com/dataInvoke-WebRequest (Obter Conteúdo)
Realiza uma requisição web e armazena o objeto de resposta em uma variável. Em seguida, acessa a propriedade `.Content` para obter o corpo da resposta como uma string.
$response = Invoke-WebRequest https://example.com
$response.ContentInvoke-WebRequest (Download)
Baixa o conteúdo de uma URL e o salva diretamente em um arquivo local. O parâmetro `-OutFile` especifica o caminho e nome do arquivo de destino.
Invoke-WebRequest https://example.com -OutFile "pagina.html"👥 Active Directory
13 snippetsComandos para gerenciar usuários, grupos e realizar consultas avançadas no Active Directory, essenciais para administradores de domínio e automação de tarefas de TI.
Get-ADUser (Todos)
Lista todos os objetos de usuário no Active Directory. O filtro `*` indica que todos os usuários devem ser retornados.
Get-ADUser -Filter *Get-ADUser (Específico)
Obtém informações detalhadas sobre um usuário específico do Active Directory, usando seu SamAccountName, DistinguishedName, SID ou GUID.
Get-ADUser -Identity "joao.silva"New-ADUser
Cria um novo objeto de usuário no Active Directory. É necessário fornecer pelo menos `-Name` e `-SamAccountName`. Recomenda-se também definir uma senha e o caminho da OU.
New-ADUser -Name "novo.usuario" -SamAccountName "novo.usuario" -GivenName "Novo" -Surname "Usuario" -AccountPassword (Convert-ToSecureString "Senha@123" -AsPlainText -Force) -Enabled $true -Path "OU=Usuarios,DC=dominio,DC=local"Set-ADUser
Modifica as propriedades de um usuário existente no Active Directory. Use `-Identity` para especificar o usuário e os parâmetros para as propriedades a serem alteradas.
Set-ADUser -Identity "joao.silva" -Department "TI" -Office "Sala 101"Disable-ADAccount
Desabilita uma conta de usuário no Active Directory, impedindo que o usuário faça logon no domínio. A conta permanece no AD, mas inativa.
Disable-ADAccount -Identity "joao.silva"Get-ADGroup (Todos)
Lista todos os objetos de grupo no Active Directory. O filtro `*` indica que todos os grupos devem ser retornados.
Get-ADGroup -Filter *Get-ADGroupMember
Lista todos os membros (usuários e/ou outros grupos) de um grupo específico do Active Directory. O nome do grupo pode ser o SamAccountName ou DistinguishedName.
Get-ADGroupMember "TI"Add-ADGroupMember
Adiciona um ou mais usuários ou grupos a um grupo existente no Active Directory. `-Identity` especifica o grupo e `-Members` os objetos a serem adicionados.
Add-ADGroupMember -Identity "TI" -Members "joao.silva"Remove-ADGroupMember
Remove um ou mais usuários ou grupos de um grupo existente no Active Directory. `-Identity` especifica o grupo e `-Members` os objetos a serem removidos.
Remove-ADGroupMember -Identity "TI" -Members "joao.silva"Search-ADAccount (Contas Desabilitadas)
Pesquisa contas no Active Directory com base em critérios específicos. `-AccountDisabled` retorna todas as contas de usuário que estão desabilitadas.
Search-ADAccount -AccountDisabledGet-ADUser (Senhas que Não Expiram)
Filtra usuários no Active Directory para encontrar aqueles cuja senha está configurada para nunca expirar. O parâmetro `-Properties` é necessário para exibir essa propriedade.
Get-ADUser -Filter {PasswordNeverExpires -eq $true} -Properties PasswordNeverExpiresGet-ADUser (Inativos 90 Dias)
Filtra usuários que não fazem logon há mais de 90 dias. `-Properties LastLogonDate` é necessário para que a propriedade seja retornada e filtrada.
Get-ADUser -Filter {LastLogonDate -lt (Get-Date).AddDays(-90)} -Properties LastLogonDateExportar Usuários para CSV
Exporta todos os usuários do Active Directory, com todas as suas propriedades (`-Properties *`), para um arquivo CSV. `-NoTypeInformation` evita a linha de tipo no arquivo.
Get-ADUser -Filter * -Properties * | Export-Csv "usuarios.csv" -NoTypeInformation🔒 Segurança e Permissões
10 snippetsGerenciamento de políticas de execução de scripts, assinatura de código e controle de acesso a arquivos, garantindo a segurança e integridade do ambiente PowerShell.
Get-ExecutionPolicy
Exibe a política de execução atual do PowerShell, que determina quais scripts podem ser executados e sob quais condições. As políticas incluem `Restricted`, `RemoteSigned`, `AllSigned` e `Bypass`.
Get-ExecutionPolicySet-ExecutionPolicy RemoteSigned
Define a política de execução para `RemoteSigned`. Isso permite que scripts criados localmente sejam executados sem assinatura, mas exige que scripts baixados da internet sejam assinados por um editor confiável.
Set-ExecutionPolicy RemoteSignedSet-ExecutionPolicy Bypass (Temporário)
Define a política de execução para `Bypass` apenas para a sessão atual do PowerShell (`-Scope Process`). Isso permite a execução de todos os scripts sem restrições, mas a política é revertida ao fechar a sessão.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy BypassSet-ExecutionPolicy AllSigned (Usuário Atual)
Define a política de execução para `AllSigned` para o usuário atual. Isso exige que todos os scripts, incluindo os criados localmente, sejam assinados por um editor confiável.
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSignedGet-ChildItem Cert:\CurrentUser\My
Lista todos os certificados digitais instalados no repositório "Pessoal" (My) do usuário atual. Útil para verificar certificados disponíveis para assinatura de código.
Get-ChildItem Cert:\CurrentUser\MyGet-AuthenticodeSignature
Verifica a assinatura digital Authenticode de um arquivo, como um script PowerShell. Retorna informações sobre o status da assinatura, o signatário e o carimbo de data/hora.
Get-AuthenticodeSignature "script.ps1"Set-AuthenticodeSignature
Assina digitalmente um script PowerShell usando um certificado Authenticode. `$cert` deve ser uma variável contendo o certificado obtido, por exemplo, via `Get-ChildItem Cert:\...`.
Set-AuthenticodeSignature -FilePath "script.ps1" -Certificate $certGet-Acl (Permissões de Pasta)
Exibe as Access Control Lists (ACLs), ou permissões de segurança, de um arquivo ou diretório. Mostra proprietário, grupo e as regras de acesso.
Get-Acl "C:\pasta"Definir Permissão de Arquivo/Pasta
Define uma nova regra de permissão para um arquivo ou pasta. Este exemplo concede controle total (`FullControl`) ao "Usuario" na pasta "C:\pasta".
$acl = Get-Acl "C:\pasta"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Usuario","FullControl","Allow")
$acl.SetAccessRule($accessRule)
Set-Acl "C:\pasta" $aclGet-Acl (Detalhado)
Exibe as permissões de um arquivo ou pasta em um formato de lista detalhado, mostrando todas as entradas de controle de acesso (ACEs) de forma mais legível.
Get-Acl "arquivo.txt" | Format-List⏰ Automação e Agendamento
11 snippetsTécnicas para automatizar tarefas repetitivas, agendar a execução de scripts e gerenciar jobs em segundo plano, otimizando a eficiência operacional.
Get-ScheduledTask
Lista todas as tarefas agendadas configuradas no sistema operacional Windows, incluindo seu status, nome e horário da próxima execução.
Get-ScheduledTaskRegister-ScheduledTask
Cria uma nova tarefa agendada. Este exemplo cria uma tarefa que executa `notepad.exe` diariamente às 9h da manhã. `New-ScheduledTaskAction` define a ação e `New-ScheduledTaskTrigger` define o gatilho.
Register-ScheduledTask -Action (New-ScheduledTaskAction -Execute "notepad.exe") -Trigger (New-ScheduledTaskTrigger -Daily -At 9am) -TaskName "AbrirNotepadDiariamente" -Description "Abre o Bloco de Notas todos os dias às 9h."Start-ScheduledTask
Inicia a execução de uma tarefa agendada manualmente, independentemente de seu gatilho programado.
Start-ScheduledTask -TaskName "MinhaTarefa"Disable-ScheduledTask
Desabilita uma tarefa agendada, impedindo que ela seja executada por seus gatilhos. A tarefa permanece no sistema, mas em estado inativo.
Disable-ScheduledTask -TaskName "MinhaTarefa"Unregister-ScheduledTask
Remove permanentemente uma tarefa agendada do sistema. O parâmetro `-Confirm:$false` evita o prompt de confirmação.
Unregister-ScheduledTask -TaskName "MinhaTarefa" -Confirm:$falseStart-Job
Inicia um script ou comando em segundo plano como um job. O `-ScriptBlock` contém o código a ser executado, e `-Name` atribui um nome ao job.
Start-Job -ScriptBlock { Get-Process } -Name "ProcessosJob"Get-Job
Lista todos os jobs em segundo plano que estão em execução ou foram concluídos na sessão atual do PowerShell.
Get-JobReceive-Job
Recupera os resultados de um job em segundo plano. Após a recuperação, os resultados são removidos do job. Use `-Keep` para manter os resultados.
Receive-Job -Id 1Stop-Job
Encerra um job em segundo plano que está em execução. Pode ser necessário usar `-Force` para jobs que não respondem.
Stop-Job -Id 1Remove-Job
Remove um job em segundo plano da sessão atual do PowerShell. Isso libera os recursos associados ao job.
Remove-Job -Id 1Workflow Básico
Define um workflow PowerShell, que permite a execução de tarefas em paralelo (`parallel`) ou em sequência (`sequence`), com resiliência a reinicializações e suporte a pontos de verificação.
workflow MeuWorkflow {
parallel {
Get-Process
Get-Service
}
sequence {
Write-Host "Concluído"
}
}🖥️ WMI e CIM
11 snippetsExploração e manipulação de informações do sistema Windows usando WMI (Windows Management Instrumentation) e CIM (Common Information Model) para monitoramento, inventário e diagnóstico avançado.
Get-WmiObject (Info SO)
Consulta o WMI para obter informações detalhadas sobre o sistema operacional Windows, como versão, service pack, data de instalação e fabricante.
Get-WmiObject -Class Win32_OperatingSystemGet-WmiObject (Info Hardware)
Consulta o WMI para obter informações gerais sobre o sistema do computador, incluindo nome do fabricante, modelo, nome do domínio e quantidade total de memória física.
Get-WmiObject -Class Win32_ComputerSystemGet-WmiObject (Info CPU)
Consulta o WMI para obter detalhes sobre o(s) processador(es) do sistema, como fabricante, velocidade, número de núcleos e arquitetura.
Get-WmiObject -Class Win32_ProcessorGet-WmiObject (Info Discos)
Consulta o WMI para obter informações sobre os discos lógicos (partições) do sistema, como letra da unidade, tamanho total, espaço livre e tipo de sistema de arquivos.
Get-WmiObject -Class Win32_LogicalDiskGet-CimInstance (CIM Moderno)
Cmdlet moderno para consultar classes CIM (Common Information Model), que é a evolução do WMI. Oferece melhor desempenho e suporte a sessões remotas. Equivalente a `Get-WmiObject`.
Get-CimInstance -ClassName Win32_OperatingSystemGet-CimInstance (Query CIM)
Executa uma consulta WQL (WMI Query Language) diretamente para filtrar objetos CIM. Este exemplo seleciona todos os processos com o nome "chrome.exe".
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'chrome.exe'"New-CimSession (Sessão Remota)
Cria uma nova sessão CIM para um computador remoto, permitindo que os cmdlets CIM sejam executados contra esse sistema. Requer permissões e conectividade de rede.
New-CimSession -ComputerName servidorGet-CimInstance (Consulta Remota)
Executa uma consulta CIM em um computador remoto usando uma sessão CIM previamente estabelecida (`$session`). Este exemplo lista os serviços no servidor remoto.
Get-CimInstance -CimSession $session -ClassName Win32_ServiceGet-EventLog (Últimos Eventos)
Recupera os 10 eventos mais recentes do log de eventos do sistema. Útil para uma rápida verificação de eventos recentes.
Get-EventLog -LogName System -Newest 10Get-WinEvent (Eventos de Erro)
Um cmdlet mais avançado para acessar logs de eventos. Este exemplo filtra eventos do log de Aplicação com nível de erro (Level 2).
Get-WinEvent -FilterHashtable @{LogName='Application'; Level=2}Get-Counter (Contador de Performance)
Obtém dados de contadores de desempenho do sistema. Este exemplo monitora o tempo de utilização total do processador em tempo real.
Get-Counter "\Processor(_Total)\% Processor Time"Cheatsheets relacionados
git status -sGit: O Kit de Emergência
Fez besteira no código? Salve este guia. Os comandos essenciais para desfazer erros, reverter commits e salvar seu emprego.
docker --versionDocker: Comandos de Produção
Esqueça a configuração manual. Copie e cole os comandos para subir containers, limpar volumes e fazer deploy em tempo recorde.
ping -c 4 google.comLinux Networking: O Guia Hacker
Sinta-se no Mr. Robot. Comandos de rede para descobrir IPs, portas abertas e diagnosticar conexões como um profissional de CyberSec.