🛠️ 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
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
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
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: lê 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
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 {}
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
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