quarta-feira, 1 de outubro de 2025

Top 5 realista para técnicos de suporte geral

🛠️ Top 5 scripts PowerShell que todo técnico de suporte deve conhecer

Estes 5 scripts cobrem as dores mais comuns no dia-a-dia de suporte: drivers, inventário, rede, limpeza e testes de conectividade. Estão prontos a usar e podes adaptá-los ao teu ambiente.


1) Backup/Restore de Drivers (sem internet)

Para quê: migrar drivers de um PC funcional para outro sem ligação à internet.
Como funciona: usa o pnputil para exportar todos os drivers e instala-os noutro PC.

# Backup-Drivers.ps1
# Exporta todos os drivers do sistema para uma pasta (ex.: D:\DriversBackup)

param(
  [string]$Destino = "D:\DriversBackup"
)

if (!(Test-Path $Destino)) { New-Item -ItemType Directory -Path $Destino | Out-Null }

Write-Host "A exportar drivers para $Destino..." -ForegroundColor Cyan
pnputil /export-driver * $Destino
Write-Host "Concluído. Copia a pasta para o PC destino e instala com:" -ForegroundColor Green
Write-Host "pnputil /add-driver $Destino\*.inf /install" -ForegroundColor Yellow

Instalar no PC destino:

pnputil /add-driver D:\DriversBackup\*.inf /install

🔗 Download (GitHub RAW)


2) Inventário rápido do sistema

Para quê: saber em segundos se a máquina cumpre requisitos (CPU, RAM, disco, SO, IP, utilizadores).
Como funciona: consulta WMI/ CIM e formata um resumo.

# Get-QuickInventory.ps1
# Mostra info essencial: SO, CPU, RAM total, IP, disco, utilizadores locais

$os = Get-ComputerInfo | Select-Object CsName, OsName, OsVersion, OsArchitecture
$cpu = Get-CimInstance Win32_Processor | Select-Object Name, NumberOfCores, MaxClockSpeed
$ramBytes = (Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum
$ramGB = [Math]::Round($ramBytes/1GB,2)
$ip = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "*" -ErrorAction SilentlyContinue | Where-Object {$_.IPAddress -notlike "169.*"} | Select-Object -First 1).IPAddress
$discos = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" | Select-Object DeviceID, @{n="Livre(GB)";e={[math]::Round($_.FreeSpace/1GB,1)}}, @{n="Total(GB)";e={[math]::Round($_.Size/1GB,1)}}
$users = Get-LocalUser | Where-Object {$_.Enabled} | Select-Object Name

Write-Host "=== SISTEMA ===" -ForegroundColor Cyan
$os | Format-List
Write-Host "=== CPU ===" -ForegroundColor Cyan
$cpu | Format-Table -AutoSize
Write-Host "=== RAM (GB) ===" -ForegroundColor Cyan
$ramGB
Write-Host "=== IP ===" -ForegroundColor Cyan
$ip
Write-Host "=== DISCOS ===" -ForegroundColor Cyan
$discos | Format-Table -AutoSize
Write-Host "=== UTILIZADORES LOCAIS (ativos) ===" -ForegroundColor Cyan
$users | Format-Table -AutoSize

🔗 Download (GitHub RAW)


3) Diagnóstico e “reset” de rede

Para quê: resolver “net esquisita”: DNS a falhar, sockets presos, DHCP marado.
O que faz: liberta/renova IP, limpa cache DNS, e opcionalmente faz reset ao Winsock/stack TCP (pede reboot).

# Fix-Network.ps1
param(
  [switch]$HardReset # inclui netsh winsock reset + int ip reset (requer reinício)
)

Write-Host "A libertar e renovar IP..." -ForegroundColor Cyan
ipconfig /release
ipconfig /renew

Write-Host "A limpar cache DNS..." -ForegroundColor Cyan
ipconfig /flushdns

if ($HardReset) {
  Write-Host "A fazer reset ao Winsock e TCP/IP..." -ForegroundColor Yellow
  netsh winsock reset
  netsh int ip reset
  Write-Host "Reinicia o PC para aplicar o reset completo." -ForegroundColor Magenta
} else {
  Write-Host "Diagnóstico de rede concluído (sem reset duro)." -ForegroundColor Green
}

Exemplos:

# Diagnóstico leve
.\Fix-Network.ps1

# Reset completo (pede reboot)
.\Fix-Network.ps1 -HardReset

🔗 Download (GitHub RAW)


4) Teste de conectividade em massa (Ping a lista + relatório)

Para quê: verificar rapidamente quais hosts estão online (routers, impressoras, servidores).
O que faz:hosts.txt, pinga cada host, mostra no ecrã e grava CSV.

# Test-Hosts.ps1
param(
  [string]$Lista = ".\hosts.txt",
  [string]$Saida = ".\resultado-ping.csv"
)

if (!(Test-Path $Lista)) {
  "192.168.1.1`n192.168.1.10`nprinter01`nfileserver" | Out-File -Encoding ascii $Lista
  Write-Host "Ficheiro $Lista criado de exemplo. Edita e volta a correr." -ForegroundColor Yellow
  exit
}

$hosts = Get-Content $Lista | Where-Object {$_ -and $_.Trim() -ne ""}
$result = foreach ($h in $hosts) {
  $ok = Test-Connection -ComputerName $h -Count 1 -Quiet -ErrorAction SilentlyContinue
  [pscustomobject]@{
    Host = $h
    Online = $ok
    Timestamp = (Get-Date)
  }
}

$result | Tee-Object -Variable _ | Format-Table -AutoSize
$result | Export-Csv -NoTypeInformation -Encoding UTF8 $Saida
Write-Host "Relatório guardado em $Saida" -ForegroundColor Green

🔗 Download (GitHub RAW)


5) Limpeza segura de ficheiros temporários

Para quê: recuperar espaço e resolver lentidão causada por lixo de sistema/usuário.
O que faz: esvazia %TEMP% (utilizador e sistema), reciclagem e Prefetch (não perigoso).

# Clean-Temp.ps1
# Recomendado correr como Admin

$paths = @(
  "$env:TEMP\*",
  "C:\Windows\Temp\*",
  "$env:SystemRoot\Prefetch\*"
)

foreach ($p in $paths) {
  Write-Host "A limpar: $p" -ForegroundColor Cyan
  try {
    Remove-Item -Path $p -Recurse -Force -ErrorAction SilentlyContinue
  } catch {
    Write-Host "Sem permissões em $p (ignorado)" -ForegroundColor Yellow
  }
}

# Esvaziar reciclagem (todas as drives)
try {
  Clear-RecycleBin -Force -ErrorAction SilentlyContinue
  Write-Host "Reciclagem limpa." -ForegroundColor Green
} catch {}

🔗 Download (GitHub RAW)


Bónus: ler MSISDN de modem/porta COM

Para quem mexe com IoT/modems: extrai o número do SIM com comandos AT.

# Get-SIM-MSISDN.ps1
param([string]$Porta="COM3",[int]$Baud=9600)
$sp = New-Object System.IO.Ports.SerialPort $Porta,$Baud,'None',8,'one'
$sp.ReadTimeout = 1000
$sp.Open()
$sp.WriteLine("AT+CNUM`r")
Start-Sleep -Milliseconds 500
$resp = $sp.ReadExisting()
$sp.Close()
$resp

🔗 Download (GitHub RAW)


Como correr os scripts em segurança

# Permitir scripts locais (só para o utilizador atual)
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

# Se o Windows bloquear o ficheiro descarregado:
Unblock-File .\NomeDoScript.ps1

# Executar
.\NomeDoScript.ps1 -Parametro Exemplo

Se tens sugestões ou queres ver uma “Parte 2” com AD, logs e automações remotas, deixa nos comentários 👇

Sem comentários:

Enviar um comentário