dezembro 6, 2025

Tecnoflavio

Soluções para Windows, guias práticos, jogos e ferramentas online

Windows Powershell

Guia PowerShell: do básico ao avançado (com exemplos úteis)

Atualizado em • Categoria: Windows / Tutoriais

Resumo: O PowerShell é o terminal moderno da Microsoft. Diferente do Prompt, trabalha com objetos (.NET), o que facilita filtrar, ordenar e transformar dados. Funciona no Windows, Linux e macOS (PowerShell 7).

1) Como abrir e verificar a versão

  • Windows 11/10: Iniciar → PowerShell (ou Windows Terminal).
  • Administrador: clique direito → Executar como administrador.
$PSVersionTable

O Windows traz o Windows PowerShell 5.1 por padrão. O PowerShell 7 é a versão atual, multiplataforma.

2) Instalar/atualizar o PowerShell 7

Pelo winget (Windows 10/11):

winget install --id Microsoft.PowerShell --source winget

3) Sistema de ajuda (aprenda qualquer cmdlet)

Get-Help Get-Process -Detailed
Get-Help Get-Process -Examples
Update-Help -UICulture pt-BR -Force
Get-Command *service*
Get-Member

4) Pipeline de objetos (o segredo do PowerShell)

# Top 5 processos por uso de CPU
Get-Process |
  Sort-Object CPU -Descending |
  Select-Object -First 5 Name, Id, CPU

# Serviços que não estão rodando
Get-Service | Where-Object Status -ne 'Running' | Select Name, Status

A pipeline do PowerShell passa objetos (com propriedades), não texto.

5) Arquivos e pastas (CRUD rápido)

# Maiores arquivos (Top 20) na pasta atual (recursivo)
Get-ChildItem -Recurse -File |
  Sort-Object Length -Descending |
  Select-Object -First 20 FullName, @{n='MB';e={[math]::Round($_.Length/1MB,2)}}

# Criar/mover/copiar/remover
New-Item -ItemType Directory .\Relatorios
New-Item -ItemType File .\Relatorios\leitura.txt -Force
Move-Item .\leitura.txt .\Relatorios\
Copy-Item .\Relatorios\leitura.txt .\Relatorios\leitura.bak
Remove-Item .\Relatorios\*.bak -Force

# Renomear em lote (prefixo)
Get-ChildItem *.jpg | Rename-Item -NewName { "foto_" + $_.Name }

6) Rede e sistema

ipconfig /all
Test-Connection google.com -Count 4
Get-NetAdapter | Where Status -eq 'Up'
Get-ComputerInfo | Select OsName,OsVersion,WindowsProductName

7) Processos e serviços

# Encerrar processo (cuidado!)
Get-Process notepad | Stop-Process -Force

# Parar/Iniciar serviço (admin)
Stop-Service Spooler
Start-Service Spooler
Get-Service Spooler | Select Name, Status

8) Execução de scripts, perfil e segurança

Permitir scripts locais:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

Perfil (executado a cada sessão):

$profile
New-Item -ItemType File -Path $profile -Force
notepad $profile

Simular antes de executar (evite sustos):

Remove-Item C:\Temp\* -Recurse -Force -WhatIf

9) Variáveis, arrays e hashtables

$nome = "Flavio"; $idade = 28
$lista = 1..5
$hash  = @{ Nome="Flavio"; Cidade="SP" }
$hash["Cidade"] = "São Paulo"

10) Funções e tratamento de erros

function Testa-Porta {
  param([string]$Host, [int]$Port=80)
  try {
    $c = New-Object Net.Sockets.TcpClient($Host,$Port)
    $c.Close()
    [pscustomobject]@{ Host=$Host; Port=$Port; Aberta=$true }
  } catch {
    [pscustomobject]@{ Host=$Host; Port=$Port; Aberta=$false; Erro=$_.Exception.Message }
  }
}
Testa-Porta -Host "google.com" -Port 443

11) Módulos e PowerShell Gallery

Install-Module PSReadLine -Scope CurrentUser -Force
Update-Module  PSReadLine
Get-InstalledModule

12) Automação útil (copiar e usar)

Limpar temporários (simulação):

$alvo = $env:TEMP
Get-ChildItem $alvo -Recurse -Force |
  Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -WhatIf

Organizar fotos por ano/mês:

$src="C:\Fotos"; $dst="D:\Fotos_Organizadas"
Get-ChildItem $src -Recurse -File |
  ForEach-Object {
    $ano = $_.LastWriteTime.Year
    $mes = "{0:D2}" -f $_.LastWriteTime.Month
    $pasta = Join-Path $dst "$ano\$mes"
    New-Item -ItemType Directory -Path $pasta -Force | Out-Null
    Move-Item $_.FullName (Join-Path $pasta $_.Name)
  }

Atualizar aplicativos com winget:

winget upgrade --all --silent

13) Remoting (administração remota)

# No alvo (como admin)
Enable-PSRemoting -Force

# Sessão remota
Enter-PSSession -ComputerName SERVIDOR

# Comando remoto
Invoke-Command -ComputerName SERVIDOR -ScriptBlock { Get-Service | Where Status -ne 'Running' }

Em ambientes corporativos, valide com a equipe de segurança antes de ativar.


FAQ rápido

PowerShell 5.1 vs 7? 5.1 vem no Windows; 7 é atual e multiplataforma. Você pode ter os dois.

Preciso rodar como admin sempre? Não — só para tarefas que exigem permissão.

Como descobrir o comando certo? Use Get-Command e Get-Help NomeDoCmdlet -Examples.

Cola de comandos (cheat-sheet)

Get-Help NOME -Examples
Get-Command *texto*
Get-Process | Sort CPU -Desc | Select -First 5 Name,Id,CPU
Get-Service | Where Status -ne 'Running'
Get-ChildItem -Recurse -File | Sort Length -Desc | Select -First 20 FullName,Length
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Install-Module NOME -Scope CurrentUser
winget upgrade --all

Use -WhatIf para simular ações destrutivas. Para tarefas de sistema, abra como Administrador.