🔴 Avançado 🕐 ~80 min Módulo 5 de 5

Administração
e PowerShell

Um bom administrador de sistemas gere o servidor remotamente, monitoriza eventos, automatiza tarefas com PowerShell e garante a existência de backups. Neste módulo final consolidamos estas competências.

Gestão Remota

Em ambientes profissionais, nunca acedemos fisicamente ao servidor. Utilizamos ferramentas de gestão remota.

🖥️

Remote Desktop (RDP)

Acesso à interface gráfica do servidor remotamente. Porta 3389. Activa com sysdm.cpl → Remote.

💻

PowerShell Remoting

Executa comandos PowerShell num servidor remoto. Usa Enter-PSSession ou Invoke-Command.

🔧

RSAT

Remote Server Administration Tools — instala ferramentas do servidor (ADUC, DHCP, DNS...) no teu PC Windows 10/11.

🌐

Windows Admin Center

Interface web moderna para gerir servidores Windows. Gratuito, da Microsoft. Substitui muitas ferramentas antigas.

PowerShell — Gestão Remota
# Ativar PowerShell Remoting no servidor
Enable-PSRemoting -Force

# Abrir sessão interativa num servidor remoto
Enter-PSSession -ComputerName "DC-LAB01" `
                -Credential (Get-Credential "EMPRESA\Administrator")

# Executar comando numa máquina remota (sem sessão interativa)
Invoke-Command -ComputerName "DC-LAB01" `
               -Credential (Get-Credential) `
               -ScriptBlock { Get-Service | Where-Object Status -eq "Running" }

# Executar script num conjunto de servidores
$servidores = "DC-LAB01", "SRV-FILE01", "SRV-WEB01"
Invoke-Command -ComputerName $servidores -ScriptBlock {
    [PSCustomObject]@{
        Servidor = $env:COMPUTERNAME
        RAM_Livre = (Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory
        CPU_Uso  = (Get-CimInstance Win32_Processor).LoadPercentage
    }
}

Event Viewer — Visualizador de Eventos

O Event Viewer (eventvwr.msc) regista tudo o que acontece no servidor. É a primeira ferramenta a consultar quando algo corre mal.

LogO que registaQuando consultar
ApplicationEventos de aplicações (erros, avisos, informações)Aplicações com falhas
SecurityLogins, logouts, tentativas falhadas, alterações de políticasInvestigação de segurança
SystemEventos do SO — serviços, drivers, hardwareFalhas de arranque, crashes
Directory ServiceReplicação AD, erros de autenticaçãoProblemas com AD
DNS ServerConsultas DNS, erros de zonaFalhas de resolução DNS
PowerShell — Analisar Logs de Eventos
# Ver últimos 20 erros no log System
Get-EventLog -LogName System -EntryType Error -Newest 20

# Ver tentativas de login falhadas (Event ID 4625) — log Security
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    Id      = 4625  # Failed logon
    StartTime = (Get-Date).AddHours(-24)  # últimas 24 horas
} | Select-Object TimeCreated, Message | Format-Table -Wrap

# Ver reinícios do sistema nas últimas 48h
Get-WinEvent -FilterHashtable @{
    LogName   = 'System'
    Id        = 1074  # System shutdown/restart
    StartTime = (Get-Date).AddHours(-48)
}

# Exportar log para CSV para análise
Get-EventLog -LogName Application -Newest 100 `
             | Export-Csv "C:\Logs\app-eventos.csv" -NoTypeInformation

PowerShell — Automação

O PowerShell permite automatizar tarefas repetitivas. Aqui estão padrões fundamentais para administração de servidores.

PowerShell — Script de relatório do servidor
# Script de relatório de saúde do servidor
function Get-ServidorSaude {
    param([string]$Servidor = $env:COMPUTERNAME)

    $os  = Get-CimInstance Win32_OperatingSystem -ComputerName $Servidor
    $cpu = Get-CimInstance Win32_Processor -ComputerName $Servidor
    $disco = Get-CimInstance Win32_LogicalDisk -ComputerName $Servidor `
             -Filter "DriveType=3"

    [PSCustomObject]@{
        Servidor     = $Servidor
        SO           = $os.Caption
        Uptime_Dias  = [math]::Round(($os.LocalDateTime - $os.LastBootUpTime).TotalDays, 1)
        RAM_Total_GB = [math]::Round($os.TotalVisibleMemorySize / 1MB, 1)
        RAM_Livre_GB = [math]::Round($os.FreePhysicalMemory / 1MB, 1)
        CPU_Uso_Pct  = $cpu.LoadPercentage
        Disco_C_GB   = [math]::Round($disco.Size / 1GB, 1)
        Disco_C_Livre= [math]::Round($disco.FreeSpace / 1GB, 1)
    }
}

# Usar a função
Get-ServidorSaude -Servidor "DC-LAB01" | Format-List
PowerShell — Criar utilizadores AD em lote (CSV)
# Formato do CSV: Nome,Apelido,Username,OU
# Ex: João,Silva,joao.silva,OU=Professores,OU=Escola,DC=escola,DC=local

$usuarios = Import-Csv "C:\Scripts\utilizadores.csv"

foreach ($u in $usuarios) {
    try {
        New-ADUser `
            -GivenName         $u.Nome `
            -Surname           $u.Apelido `
            -Name              "$($u.Nome) $($u.Apelido)" `
            -SamAccountName    $u.Username `
            -UserPrincipalName "$($u.Username)@escola.local" `
            -Path              $u.OU `
            -AccountPassword   (ConvertTo-SecureString "Temp@2024!" -AsPlainText -Force) `
            -ChangePasswordAtLogon $true `
            -Enabled           $true
        Write-Host "✓ Criado: $($u.Username)" -ForegroundColor Green
    }
    catch {
        Write-Host "✗ Erro em $($u.Username): $_" -ForegroundColor Red
    }
}

Backup e Recuperação

Sem backup, qualquer falha de hardware, ransomware ou erro humano pode ser catastrófico. A regra 3-2-1 é o mínimo recomendado.

Regra 3-2-1 de backup:
3 cópias dos dados · 2 tipos de suporte diferentes · 1 cópia fora do local (offsite/cloud)

PowerShell — Windows Server Backup
# Instalar feature de backup
Install-WindowsFeature -Name Windows-Server-Backup

# Criar backup manual do estado do sistema (System State)
# Inclui AD, registo, ficheiros de arranque — essencial para recuperar DC
wbadmin start systemstatebackup -backupTarget:D: -quiet

# Agendar backup diário (usando Task Scheduler via PS)
$action  = New-ScheduledTaskAction -Execute "wbadmin" `
           -Argument "start systemstatebackup -backupTarget:D: -quiet"
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
Register-ScheduledTask -TaskName "BackupDiario" `
                       -Action $action -Trigger $trigger `
                       -RunLevel Highest -Force

# Ver status do último backup
wbadmin get status

Monitorização de Desempenho

PowerShell — Monitorização em tempo real
# Ver processos que mais consomem CPU (top 10)
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 `
            | Format-Table Name, CPU, WorkingSet -AutoSize

# Monitorizar uso de disco em todos os volumes
Get-PSDrive -PSProvider FileSystem | Select-Object `
    Name,
    @{N="Total_GB";  E={[math]::Round(($_.Used + $_.Free) / 1GB, 1)}},
    @{N="Livre_GB";  E={[math]::Round($_.Free / 1GB, 1)}},
    @{N="Usado_Pct"; E={[math]::Round($_.Used / ($_.Used + $_.Free) * 100, 1)}}

# Ver serviços parados que deveriam estar a correr
Get-Service | Where-Object { $_.Status -ne "Running" -and $_.StartType -eq "Automatic" }

# Reiniciar um serviço específico
Restart-Service -Name "DNS" -Force
Restart-Service -Name "DHCP" -Force

# Script de alerta: envia aviso se disco C tiver menos de 10% livre
$disco = Get-PSDrive C
$livPct = [math]::Round($disco.Free / ($disco.Used + $disco.Free) * 100, 1)
if ($livPct -lt 10) {
    Write-Warning "⚠️ Disco C: apenas $livPct% livre! Intervenção necessária."
    # Aqui podias enviar email ou criar evento no Event Viewer
}
Laboratório Final

Lab 5 — Administração completa da infraestrutura

Desafio integrador

Construir e documentar uma infraestrutura escolar completa

  1. Infraestrutura: Tens o servidor DC-LAB01 com AD DS instalado e o domínio escola.local configurado. Verifica que DNS e DHCP estão a funcionar.
  2. AD: Cria a estrutura: OU=Escola → OU=Professores, OU=Alunos, OU=Computadores. Cria 5 professores e 10 alunos via script PowerShell com CSV.
  3. GPO: Cria e aplica uma GPO à OU Alunos que: desactive o Painel de Controlo, defina o fundo de ecrã para uma imagem da escola, e bloqueie a instalação de software.
  4. DHCP: Configura um âmbito para 192.168.1.100–192.168.1.200 com exclusão de .1 a .20. Cria uma reserva para a "impressora da sala" com MAC fictício.
  5. DNS: Cria registos A para fileserver (192.168.1.30), webserver (192.168.1.31) e um CNAME intranet apontando para webserver.
  6. Monitorização: Escreve um script PS que verifica: espaço em disco (<20% → aviso), serviços AD/DNS/DHCP a correr, e últimos 5 erros no Event Log. Guarda o relatório em C:\Relatorios\saude.txt.
  7. Backup: Agenda um backup do System State às 03:00 todos os dias para a unidade D:.
  8. Documentação: Cria um documento Word com: diagrama da rede, lista de IPs, utilizadores criados, GPOs aplicadas e procedimento de recuperação.
🏆
Desafio extra: Instala uma segunda VM com Windows 10/11, ingresso-a no domínio escola.local, e verifica que as GPOs dos alunos se aplicam quando entras com uma conta de aluno. As GPOs dos professores não devem restringir o Painel de Controlo.
Quiz Final

Revisão geral — todos os módulos

1. Qual das seguintes afirmações sobre o PowerShell Remoting é verdadeira?

2. No Event Viewer, que Event ID indica uma tentativa de login falhada?

3. A regra de backup 3-2-1 significa:

4. [Revisão Módulo 3] Qual é o propósito principal das Group Policy Objects (GPOs)?

Próximos Passos

Parabéns por concluir o curso! Aqui ficam os tópicos avançados para continuar a aprender:

🔄

AD DS Replicação

Implementar um segundo Domain Controller para redundância e balanceamento de carga.

📁

File Server + DFS

Configurar partilhas de ficheiros, quotas, permissões NTFS e replicação DFS entre locais.

🖨️

Print Server

Centralizar impressoras e distribuir drivers automaticamente via GPO.

🔐

AD CS — Certificados

Autoridade de Certificação interna para HTTPS, VPN e autenticação por certificado.

☁️

Azure AD Connect

Sincronizar o AD local com o Microsoft 365 / Azure Active Directory.

🛡️

Windows Defender

Configurar antivírus, EDR e proteção centralizada com Defender for Endpoint.

🎓
Certificações Microsoft recomendadas: AZ-900 (Azure Fundamentals) → MS-900 (M365 Fundamentals) → AZ-800 (Administering Windows Server Hybrid Core Infrastructure). Todas têm recursos de estudo gratuitos em learn.microsoft.com.