Introdução ao PowerShell
O PowerShell é uma ferramenta de automação de tarefas e gerenciamento de configuração desenvolvida pela Microsoft. Ele combina uma interface de linha de comando com uma linguagem de script baseada no .NET Framwork. Diferente de ferramentas tradicionais baseadas em texto, o PowerShell trabalha com objetos, permitindo uma manipulação de dados mais eficiente e uma interação mais profunda com componentes do sistema.
História e Evolução
O desenvolvimento do PowerShell surgiu da necessidade de superar as limitações das ferramentas de linha de comando existentes no Windows, como o cmd.exe e scripts batch. A abordagem orientada a objetos foi projetada para integrar a simplicidade do scripting com a robustez do .NET Framework.
Conceito de Objetos
No contexto do PowerShell, um objeto represneta um item com propriedades (características) e métodos (ações). Por exemplo, um objeto arquivo pode ter propriedades como Nome, Tamanho e DataModificação, além de métodos como Copiar() e Renomear(). Quando um cmdlet é executado, ele retorna objetos em vez de texto puro, permitindo operações mais complexas e flexíveis.
Comandos Fundamentais do PowerShell
Sintaxe Verb-Noun
Os comandos do PowerShell, conhecidos como cmdlets, seguem a convenção de nomenclatura Verbo-Substantivo. O verbo descreve a ação, enquanto o substantivo identifica o alvo da ação.
Get-Content: Exibe o conteúdo de um arquivo.Set-Location: Altera o diretório de trabalho atual.
Explorando Cmdlets
O cmdlet Get-Command lista todos os comandos disponíveis na sessão atual. Para filtrar apenas as funções, utilize o parâmetro -CommandType.
Get-Command -CommandType "Function"
O cmdlet Get-Help fornece documentação detalhada sobre outros comandos. Por exemplo, para ver exemplos de uso do cmdlet Get-Date:
Get-Help Get-Date -examples
O cmdlet Get-Alias exibe atalhos para comandos, como cd para Set-Location.
Instalação de Módulos
Para buscar módulos em repositórios online, use Find-Module. Para instalar um módulo, use Install-Module.
Find-Module -Name "Pester*"
Install-Module -Name "Pester"
Gerenciamento de Arquivos e Diretórios
Navegação no Sistema de Arquivos
Use Get-ChildItem para listar itens em um diretório.
Get-ChildItem -Path "C:\Documentos"
Para mudar o diretório atual:
Set-Location -Path "C:\Documentos\Projeto"
Criação e Remoção de Itens
Crie um novo diretório ou arquivo com New-Item.
New-Item -Path ".\NovoDiretorio" -ItemType "Directory"
New-Item -Path ".\NovoDiretorio\arquivo.txt" -ItemType "File"
Para remover itens:
Remove-Item -Path ".\NovoDiretorio\arquivo.txt"
Remove-Item -Path ".\NovoDiretorio" -Recurse
Leitura de Conteúdo
Exiba o conteúdo de um arquivo com Get-Content.
Get-Content -Path ".\NovoDiretorio\arquivo.txt"
Manipulação de Dados com Pipelines
Filtragem e Ordenação
Use o operador de pipeline | para passar objetos entre comandos. Por exemplo, para listar arquivos por tamanho:
Get-ChildItem | Sort-Object -Property Length
Filtre itens com Where-Object usando operadores de comparação como -eq, -gt, -like.
Get-ChildItem | Where-Object -Property Extension -eq ".txt"
Get-ChildItem | Where-Object -Property Length -gt 1024
Get-ChildItem | Where-Object -Property Name -like "relat*"
Seleção de Propriedades
Use Select-Object para escolher propriedades específicas de um objeto.
Get-ChildItem | Select-Object -Property Nome, Tamanho
Busca em Conteúdo
O cmdlet Select-String procura por padrões em arquivos, similar ao grep em sistemas Unix.
Select-String -Path ".\*.log" -Pattern "erro"
Informações do Sistema e Rede
Dados do Sistema
Obtenha informações detalhadas do sistema com Get-ComputerInfo.
Get-ComputerInfo | Select-Object -Property OsName, WindowsVersion, TotalPhysicalMemory
Liste os usuários locais com Get-LocalUser.
Get-LocalUser | Select-Object -Property Nome, Habilitado, Descrição
Configurações de Rede
Visualize a configuração IP com Get-NetIPConfiguration.
Get-NetIPConfiguration
Liste todos os endereços IP atribuídos com Get-NetIPAddress.
Get-NetIPAddress | Select-Object -Property IPAddress, InterfaceAlias, AddressFamily
Análise de Sistema em Tempo Real
Processos e Serviços
Monitore processos em execução com Get-Process.
Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 5
Verifique o status dos serviços com Get-Service.
Get-Service | Where-Object -Property Status -eq "Running"
Conexões de Rede
Inspecione conexões TCP ativas com Get-NetTCPConnection.
Get-NetTCPConnection | Where-Object -Property State -eq "Established"
Integridade de Arquivos
Calcule o hash de um arquivo para verificação de integridade com Get-FileHash.
Get-FileHash -Path ".\importante.doc" -Algorithm SHA256
Scripting no PowerShell
O scriptign permite automatizar tarefas complexas. No contexto de segurança, scripts são essenciais para:
- Defesa (Blue Team): Análise de logs, detecção de anomalias e resposta a incidentes.
- Ataque (Red Team): Enumeração de sistemas, execução remota de comandos e evasão de defesas.
O cmdlet Invoke-Command é crucial para execução remota de comandos.
Invoke-Command -ComputerName "Servidor01" -ScriptBlock { Get-Process }
Para executar um script em um computador remoto:
Invoke-Command -FilePath "C:\Scripts\analise.ps1" -ComputerName "Servidor01"