Exchange Online Está Ficando Mais Seguro (e Seus Scripts Podem Quebrar) | Expert Solutions Microsoft https://paulocostati.com.br Tue, 31 Mar 2026 20:44:31 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.9.4 https://i0.wp.com/paulocostati.com.br/wp-content/uploads/2024/09/Logotipo-empresa-de-programacao-sistemas-e-tecnologia.png?fit=32%2C32&ssl=1 Exchange Online Está Ficando Mais Seguro (e Seus Scripts Podem Quebrar) | Expert Solutions Microsoft https://paulocostati.com.br 32 32 209994073 Exchange Online Está Ficando Mais Seguro (e Seus Scripts Podem Quebrar) https://paulocostati.com.br/exchange-online/exchange-online-esta-ficando-mais-seguro-e-seus-scripts-podem-quebrar/?utm_source=rss&utm_medium=rss&utm_campaign=exchange-online-esta-ficando-mais-seguro-e-seus-scripts-podem-quebrar https://paulocostati.com.br/exchange-online/exchange-online-esta-ficando-mais-seguro-e-seus-scripts-podem-quebrar/#respond Tue, 31 Mar 2026 20:44:23 +0000 https://paulocostati.com.br/?p=337 Você chega no escritório numa segunda-feira, abre o PowerShell, roda aquele script que sempre funcionou e ele falha. Sem aviso prévio, sem e-mail de alerta. Simplesmente parou. Se isso ainda não aconteceu com você, pode acontecer em breve: a Microsoft está implementando pelo menos quatro mudanças significativas no Exchange Online ao longo de 2026 que vão quebrar scripts, integrações e fluxos que funcionam há anos.

A boa notícia? Todas essas mudanças tornam o Exchange mais seguro. A má notícia? Se você não se preparar agora, vai descobrir na pior hora possível.

Neste artigo, vou detalhar cada uma dessas mudanças, explicar o impacto real na sua rotina de administrador e o mais importante mostrar exatamente o que fazer para se proteger antes dos deadlines.

1. Graph API: Seus Apps Não Vão Mais Poder Editar E-mails Recebidos

A mudança mais impactante para desenvolvedores chegou em 24 de março de 2026: a Microsoft anunciou que aplicações que usam a Graph API para modificar propriedades sensíveis de e-mails recebidos (assunto, corpo, destinatários) terão acesso bloqueado.

O que muda na prática?

Hoje, qualquer app com permissão `Mail.ReadWrite` pode alterar e-mails que já foram entregues na caixa de entrada. Isso era usado para classificações automáticas, limpeza de dados e integrações de CRM. A partir de 31 de dezembro de 2026, essas operações exigirão uma permissão específica e mais restritiva: `Mail-Advanced.ReadWrite`.

Por que a Microsoft está fazendo isso?

O conceito é imutabilidade de mensagens. E-mails recebidos são registros que muitas vezes servem como evidência legal ou compliance. Permitir que apps modifiquem esses e-mails silenciosamente cria riscos sérios de integridade de dados.

O que você precisa fazer agora

1. Audite seus apps — No [Azure AD App Registrations](https://entra.microsoft.com/), liste todos os apps com permissão `Mail.ReadWrite` e verifique se algum modifica e-mails recebidos

2. Solicite a nova permissão — Adicione `Mail-Advanced.ReadWrite` aos apps que realmente precisam editar e-mails entregues

3. Teste antes do enforcement — O período de transição vai até 31/12/2026. Não espere dezembro para descobrir que algo quebrou

 Fonte: [Upcoming Breaking Changes to Modifying Sensitive Email Properties via Graph API](https://techcommunity.microsoft.com/blog/exchange/upcoming-breaking-changes-to-modifying-sensitive-email-properties-via-graph-api/4505227) — Exchange Team Blog, 24/Mar/2026

2. PowerShell: O Parâmetro -Credential Vai Deixar de Funcionar

Se você administra Exchange Online via PowerShell, provavelmente já usou algo assim:

$cred = Get-Credential

Connect-ExchangeOnline -Credential $cred

Esse padrão está com os dias contados. A Microsoft anunciou a deprecação do parâmetro -Credential no módulo Exchange Online PowerShell. A autenticação básica com credenciais armazenadas simplesmente vai parar de funcionar.

Por que isso importa tanto?

Muitos administradores têm scripts agendados (scheduled tasks, Azure Automation runbooks, pipelines CI/CD) que usam `-Credential` para se conectar automaticamente ao Exchange Online. Quando o parâmetro for removido, todos esses scripts vão falhar silenciosamente.

Como migrar

A solução é migrar para autenticação moderna usando certificados ou managed identities:

# Autenticação via certificado (recomendado para scripts)
Connect-ExchangeOnline `
  -CertificateThumbprint "SEU_THUMBPRINT" `
  -AppId "SEU_APP_ID" `
  -Organization "seudominio.onmicrosoft.com"
# Autenticação interativa (para uso manual)
Connect-ExchangeOnline -UserPrincipalName admin@seudominio.com

Checklist de migração

  • [ ] Liste todos os scripts que usam `Connect-ExchangeOnline -Credential`
  • [ ] Crie um App Registration no Entra ID com permissões de Exchange
  • [ ] Gere e instale um certificado para autenticação
  • [ ] Atualize cada script para usar `-CertificateThumbprint`
  • [ ] Teste em ambiente de homologação antes de substituir em produção

Fonte: [Deprecation of the -Credential Parameter in Exchange Online PowerShell](https://techcommunity.microsoft.com/blog/exchange/deprecation-of-the–credential-parameter-in-exchange-online-powershell/4494584) — Exchange Team Blog, Fev/2026

3. EWS Está Sendo Aposentado: Se Você Ainda Usa, É Hora de Correr

O Exchange Web Services (EWS) foi por anos a API principal para integrar com o Exchange. Calendários, e-mails, contatos tudo passava pelo EWS. Mas a Microsoft já vem sinalizando sua aposentadoria há algum tempo, e agora publicou um guia prático de remediação para ajudar organizações a se desligarem do EWS antes do fim.

O risco real

O problema não é seus scripts. O problema é que você pode nem saber que usa EWS. Muitas aplicações de terceiros como sistemas de helpdesk, CRM, backup e assinatura de e-mail usam EWS nos bastidores. Quando o EWS for desativado, essas integrações vão parar.

Como descobrir o que usa EWS no seu tenant

A Microsoft publicou orientações detalhadas de como encontrar e remediar o uso de EWS no seu ambiente. O processo envolve:

1. Verificar logs no Entra ID — Procure sign-ins com o resource “Office 365 Exchange Online” que usam EWS como protocolo

2. Usar o relatório de uso de apps — No Exchange Admin Center, verifique quais aplicações estão fazendo chamadas EWS

3. Contactar fornecedores — Para apps de terceiros, pergunte ao fornecedor se já migraram para a Graph API

4. Migrar código próprio — Substitua chamadas EWS pela [Microsoft Graph API](https://learn.microsoft.com/graph/api/resources/mail-api-overview), que é o sucessor oficial

Não espere o último dia

A tendência é clara: EWS não vai receber novas funcionalidades e a Microsoft está ativamente guiando todos para a Graph API. Quanto antes você fizer o inventário, menor o risco de surpresas.

Fonte: [Notes from the Field: Finding and Remediating EWS App Usage Before Retirement](https://techcommunity.microsoft.com/blog/exchange/notes-from-the-field-finding-and-remediating-ews-app-usage-before-retirement/4496469) — Exchange Team Blog, Fev/2026

4. SMTP DANE e MTA-STS: Segurança de Transporte com Controle Granular

Nem toda mudança é sobre coisas quebrando. Algumas são sobre o Exchange ficando genuinamente mais seguro. Em 10 de março de 2026, a Microsoft anunciou suporte a modos configuráveis de SMTP DANE (DNS-based Authentication of Named Entities) e MTA-STS (Mail Transfer Agent Strict Transport Security) em conectores outbound.

O que isso significa para você?

Antes, o Exchange Online usava criptografia oportunista por padrão: tentava TLS, mas se o servidor destino não suportasse, enviava em texto plano. Agora, você pode escolher entre três modos por conector:

Modo Comportamento Quando usar
Opportunistic (padrão) Tenta DANE/MTA-STS, mas faz fallback se não houver suporteComunicação geral
Mandatory Exige SMTP DANE. Se o destino não suportar, o e-mail não é enviadoParceiros com SLA de segurança
None Desabilita verificação DANE/MTA-STS Troubleshooting ou servidores legados

Na prática

Se você tem parceiros de negócio com quem troca informações sensíveis (jurídico, financeiro, saúde), agora pode criar um conector específico para esses domínios com modo Mandatory, garantindo que os e-mails nunca sejam transmitidos sem criptografia verificada.

Para o restante do tráfego, manter Opportunistic é o caminho mais seguro sem impactar a entrega.

Fonte: [Announcing SMTP DANE & MTA-STS Connector Modes in Exchange Online](https://techcommunity.microsoft.com/blog/exchange/announcing-smtp-dane–mta-sts-connector-modes-in-exchange-online/4501005) — Exchange Team Blog, 10/Mar/2026

5. O Que Mais Está Chegando: IA e Compliance

Além das mudanças que exigem ação imediata, a Microsoft está investindo em duas áreas que vão mudar a forma como administramos o Exchange:

Troubleshooting com IA para Purview

O novo AI-Powered Troubleshooter para Microsoft Purview Data Lifecycle Management usa inteligência artificial para diagnosticar problemas de retenção e compliance automaticamente. Em vez de você vasculhar logs manualmente, a IA identifica a causa raiz e sugere ações corretivas. Isso é especialmente útil para organizações que enfrentam auditorias regulares.

Priority Cleanup V2

A Microsoft está desenvolvendo a segunda versão do Priority Cleanup ferramenta para exclusão urgente de conteúdo em mailboxes (data spillage, conteúdo sensível vazado). O V2 promete velocidade significativamente maior, workflow de aprovação melhorado e experiência de administrador simplificada. A Microsoft está ativamente pedindo feedback da comunidade para priorizar melhorias.

Seu Plano de Ação: O Que Fazer Esta Semana

  • [ ] Audite seus scripts PowerShell — Procure por `-Credential` no seu repositório de scripts
  • [ ] Verifique uso de EWS — Consulte os logs do Entra ID para saber quais apps usam EWS

Este mês

  • [ ] Inventarie apps com Graph API — Liste quais usam `Mail.ReadWrite` e modificam e-mails recebidos
  • [ ] Inicie migração do -Credential — Crie o App Registration e certificado para autenticação moderna

Até o fim do semestre

  • [ ] Configure SMTP DANE — Defina modo Mandatory para parceiros de alta segurança
  • [ ] Solicite `Mail-Advanced.ReadWrite` — Para apps que precisam continuar editando e-mails (deadline: 31/12/2026)
  • [ ] Elimine dependências de EWS — Migre ou substitua todas as integrações que ainda usam EWS

Conclusão

O Exchange Online em 2026 está mais seguro, mais controlado e mais alinhado com padrões modernos de autenticação e criptografia. Mas segurança vem com responsabilidade: se você não atualizar seus scripts, permissões e integrações, eles vão quebrar.

A boa notícia é que nenhuma dessas mudanças é surpresa. A Microsoft está dando prazos claros e documentação detalhada. O que falta é você bloquear algumas horas na agenda e fazer o inventário.

Comece hoje pelo mais simples: abra seu repositório de scripts e procure por `-Credential`. Se encontrar, você já tem trabalho pela frente.

Fontes

1. [Upcoming Breaking Changes to Modifying Sensitive Email Properties via Graph API](https://techcommunity.microsoft.com/blog/exchange/upcoming-breaking-changes-to-modifying-sensitive-email-properties-via-graph-api/4505227) — Exchange Team Blog, 24/Mar/2026

2. [Deprecation of the -Credential Parameter in Exchange Online PowerShell](https://techcommunity.microsoft.com/blog/exchange/deprecation-of-the–credential-parameter-in-exchange-online-powershell/4494584) — Exchange Team Blog, Fev/2026

3. [Notes from the Field: Finding and Remediating EWS App Usage Before Retirement](https://techcommunity.microsoft.com/blog/exchange/notes-from-the-field-finding-and-remediating-ews-app-usage-before-retirement/4496469) — Exchange Team Blog, Fev/2026

4. [Announcing SMTP DANE & MTA-STS Connector Modes in Exchange Online](https://techcommunity.microsoft.com/blog/exchange/announcing-smtp-dane–mta-sts-connector-modes-in-exchange-online/4501005) — Exchange Team Blog, 10/Mar/2026

5. [AI-Powered Troubleshooting for Microsoft Purview DLM](https://techcommunity.microsoft.com/blog/exchange/ai-powered-troubleshooting-for-microsoft-purview-data-lifecycle-management-now-a/4502744) — Exchange Team Blog, Mar/2026

6. [Give Us Feedback on Faster, Simpler Data Purging for Exchange Online](https://techcommunity.microsoft.com/blog/exchange/give-us-feedback-on-faster-simpler-data-purging-for-exchange-online/4503905) — Exchange Team Blog, 19/Mar/2026

]]>
https://paulocostati.com.br/exchange-online/exchange-online-esta-ficando-mais-seguro-e-seus-scripts-podem-quebrar/feed/ 0 337
Como me preparei para o exame AB-900: Microsoft 365 Copilot and Agent Administration Fundamentals https://paulocostati.com.br/exchange-online/como-me-preparei-para-o-exame-ab-900-microsoft-365-copilot-and-agent-administration-fundamentals/?utm_source=rss&utm_medium=rss&utm_campaign=como-me-preparei-para-o-exame-ab-900-microsoft-365-copilot-and-agent-administration-fundamentals https://paulocostati.com.br/exchange-online/como-me-preparei-para-o-exame-ab-900-microsoft-365-copilot-and-agent-administration-fundamentals/#respond Fri, 27 Mar 2026 01:01:40 +0000 https://paulocostati.com.br/?p=333 Fala, pessoal, tudo bem com vocês? Hoje vou ser direto: quando a Microsoft anunciou o AB-900, minha primeira reação foi: “Mais um exame de fundamentals…”. Mas, ao ler o escopo, mudei de ideia rapidinho.

Diferente de outros exames “900”, que costumam ser a porta de entrada para iniciantes, o AB-900 faz algo estratégico: ele une a base sólida de administração do Microsoft 365 com a nova camada de governança de IA e Agentes. Se você já é Admin de M365 no dia a dia, isso é território familiar, mas com uma dimensão nova que está mudando como gerenciamos ambientes produtivos.

Como analista sênior lidando com Exchange Online, SharePoint e Teams todos os dias, decidi documentar como saí do zero até a aprovação. Confira o que funcionou para mim.


O que é o AB-900 e por que ele importa agora?

O exame Microsoft 365 Certified: Copilot and Agent Administration Fundamentals foi lançado em beta no final de 2025 e chegou à disponibilidade geral em fevereiro de 2026. Ele valida se você entende não apenas como usar o Copilot, mas como administrá-lo com segurança e controle.

Domínio de ConhecimentoPeso na ProvaFoco Principal
Recursos Centrais M36530–35%Usuários, grupos, licenças e Admin Centers.
Proteção e Governança35–40%Purview, DLP, Zero Trust e permissões de IA.
Tarefas Adm. de Copilot e Agentes25–30%Pay-as-you-go, ciclo de vida de agentes e monitoramento.

Estrutura do exame AB-900


Meu Plano de Estudo (1 Semana)

Com a ajuda do NotebookLM e a experiência prévia que eu já tinha, precisei de aproximadamente uma semana de foco total para realizar o exame.

1. Revisão da Base (Domínio 1)

Para quem opera Exchange e SharePoint, essa é a “zona de conforto”. Usei o NotebookLM para gerar resumos focados em detalhes que a prova cobra, como: diferenças cruciais entre tipos de grupos, configurações de domínio no tenant e políticas de compartilhamento (sharing policies).

2. O Coração da Prova: Purview e Segurança (Domínio 2)

Aqui o exame exige atenção redobrada. O foco é como a segurança tradicional se aplica ao contexto de IA:

  • Microsoft Purview: Políticas de DLP e Sensitivity Labels (essenciais para o Copilot respeitar dados sensíveis).
  • Microsoft Entra: Acesso Condicional e troubleshooting de sign-in.
  • Zero Trust: Como os três princípios se aplicam a permissões no contexto de IA.

3. Copilot e Agentes na Prática (Domínio 3)

A parte mais “fresca” da prova. Foquei em:

  • Licenciamento: Diferença entre assinatura mensal tradicional e o modelo pay-as-you-go.
  • Copilot Studio: Ciclo de vida dos agentes (criação, publicação e monitoramento no Power Platform Admin Center).
  • Monitoramento de Uso: Relatórios no M365 Admin Center e insights operacionais.

Recursos que Recomendo (de verdade!)

  1. Study Guide Oficial: É o seu mapa obrigatório. Ele lista exatamente os tópicos cobertos.
  2. Microsoft Learn (Curso AB-900T00-A): Gratuito, estruturado e totalmente alinhado ao exame.
  3. Exam Sandbox da Microsoft: Use para se acostumar com as questões de hotspot e drag-and-drop antes do dia oficial.
  4. NotebookLM: Usei para processar a documentação oficial e gerar áudios e cards de revisão.
  5. Tenant de Testes: Nada substitui o hands-on. Explore o Copilot Admin Center e as configurações do Power Platform.

Dica de Prova: O exame é muito orientado a cenários. Espere perguntas do tipo: “Uma organização quer garantir que o Copilot não acesse documentos confidenciais. Qual recurso você configura?”. A resposta exige saber o papel das Sensitivity Labels na prática.


Conclusão

O AB-900 chegou no momento certo. A onda de Copilot nas empresas está criando uma demanda real por profissionais que saibam administrar com segurança e governança. Se você já domina o ecossistema M365, você já está a meio caminho da certificação.

Fui, estudei e passei. Valeu cada minuto investido.

E você, já está estudando para o AB-900 ou tem alguma dúvida sobre a preparação? Deixa aqui nos comentários! E se você já fez a prova, conta como foi a sua experiência.

]]>
https://paulocostati.com.br/exchange-online/como-me-preparei-para-o-exame-ab-900-microsoft-365-copilot-and-agent-administration-fundamentals/feed/ 0 333
Como Criar Relatórios Preditivos no Exchange Online Usando IA e MCP https://paulocostati.com.br/powershell/como-criar-relatorios-preditivos-no-exchange-online-usando-ia-e-mcp/?utm_source=rss&utm_medium=rss&utm_campaign=como-criar-relatorios-preditivos-no-exchange-online-usando-ia-e-mcp https://paulocostati.com.br/powershell/como-criar-relatorios-preditivos-no-exchange-online-usando-ia-e-mcp/#respond Wed, 18 Mar 2026 14:07:54 +0000 https://paulocostati.com.br/?p=305 Fala Pessoal, tudo bem com vocês? Hoje vou falar um pouco sobre como criar relatórios preditivos no Exchange Online combinando PowerShell, MCP e GitHub Copilot para você sair do modo reativo e começar a antecipar problemas de mailbox antes que o usuário perceba.

Você já chegou numa segunda-feira de manhã e descobriu que a cota de mailbox de um usuário estourou no final de semana? Ou recebeu uma ligação furiosa porque o fluxo de e-mails de um departamento inteiro ficou represado por um problema de throttling que ninguém viu vir?

Quem administra Exchange Online no dia a dia sabe como isso acontece. A plataforma é robusta, mas os problemas aparecem depois que o estrago está feito. Os relatórios nativos do Microsoft 365 Admin Center mostram o passado e o passado não te ajuda a agir antes.

Então fui atrás de uma forma de mudar isso. Combinando PowerShell, Microsoft Graph API, MCP e o GitHub Copilot em Agent Mode no VS Code, montei um fluxo que coleta os dados do ambiente, identifica padrões e gera um relatório de risco antes do incidente acontecer sem precisar de nenhuma chave de API externa. Vou mostrar tudo aqui, do zero.

O Problema com os Relatórios Tradicionais

O Exchange Online tem bastante coisa disponível para quem quer monitorar o ambiente: relatórios no Admin Center, dados via PowerShell com o módulo ExchangeOnlineManagement, endpoints na Microsoft Graph. Para auditoria e compliance, funcionam bem.

O problema é que todos eles são descritivos. Te dizem o que aconteceu. Não te dizem o que vai acontecer.

Pensa num cenário real: você tem 800 usuários, e 40 deles estão com a cota de mailbox entre 85% e 95%. Você extrai esse dado hoje com PowerShell. E aí? Manda e-mail manual para cada um? Abre chamado para o suporte tratar caso a caso? Fica verificando todo dia?

O que eu queria era diferente: coletar esses dados automaticamente, estimar em quantos dias cada mailbox vai estourar, gerar um relatório priorizado com os casos mais urgentes e sugestões de ação sem precisar escrever uma linha de análise na mão. É exatamente isso que o MCP combinado com o Copilot permite construir.

O Que é o MCP e Por Que Usei Ele Aqui

O MCP (Model Context Protocol) é um protocolo aberto da Anthropic que padroniza como modelos de IA se conectam a fontes de dados e ferramentas externas. Em vez de montar integrações separadas para cada coisa, você expõe funções via MCP e o modelo sabe quando e como chamá-las.

No nosso caso, o MCP age como uma ponte entre o PowerShell que conhece o Exchange Online de perto e o GitHub Copilot, que vai fazer a análise. Você define as ferramentas disponíveis, como “buscar mailboxes próximas do limite” ou “verificar o fluxo de e-mail dos últimos dias”, e o Copilot decide o que consultar para responder o que você pediu.

O ponto que me convenceu a usar essa abordagem é que você não precisa preparar os dados na mão antes de jogar para IA. O modelo faz as chamadas, interpreta e devolve o relatório formatado. Isso muda bastante a dinâmica do trabalho.

Arquitetura da Solução

Antes de entrar no código, vale ver a estrutura que montei. O diagrama abaixo mostra as quatro camadas e como elas se conectam:

Cada camada tem um papel bem definido. O PowerShell vai na fonte conecta no Exchange Online, puxa os dados e gera o JSON. O MCP Server transforma essas funções em ferramentas que o Copilot pode chamar. O Copilot em Agent Mode usa essas ferramentas para montar o relatório, sem precisar de nenhuma API key extra.

Pré-requisitos

Antes de começar, garanta que você tem:

  • Módulo ExchangeOnlineManagement instalado (Install-Module ExchangeOnlineManagement)
  • App Registration no Entra ID configurado com as permissões mínimas (detalhes na próxima seção)
  • Certificado X.509 gerado e associado ao App Registration sem client secret
  • Node.js 18+ para rodar o MCP Server
  • VS Code com a extensão GitHub Copilot (plano Free já funciona)
  • PowerShell 7.x recomendado para compatibilidade com o MCP SDK

Autenticação App Registration com Certificado

Esse é o ponto que separa uma automação feita para durar de uma gambiarra que quebra na primeira rotação de senha. Usar App Registration com certificado resolve três problemas de uma vez: não tem credencial de usuário no script, o MFA não bloqueia a execução agendada e não tem client secret para rotacionar de tempos em tempos.

Permissões mínimas necessárias

Configure o App Registration com as seguintes permissões de Aplicativo não delegadas, porque o script roda sem usuário logado:

APIPermissão
Microsoft GraphMail.Read
Microsoft GraphMailboxSettings.Read
Microsoft GraphReports.Read.All
Office 365 Exchange OnlineExchange.ManageAsApp

Role obrigatória: depois de conceder Exchange.ManageAsApp, atribua a role Global Reader ao Service Principal do app no portal do Entra ID → Roles and Administrators. Sem essa role, o Connect-ExchangeOnline retorna acesso negado mesmo com a permissão consentida já caí nessa antes.

Admin consent: permissões de Aplicativo precisam de consentimento de um Global Administrator no Entra ID. Sem isso, nada funciona.

Gerando o certificado autoassinado

Em produção, prefira um certificado emitido pela CA interna. Para lab ou ambientes sem CA disponível, o PowerShell resolve em segundos:

$certParams = @{
Subject = "CN=ExchangeMCPApp"
CertStoreLocation = "Cert:CurrentUserMy"
KeyExportPolicy = "Exportable"
KeySpec = "Signature"
KeyLength = 2048
HashAlgorithm = "SHA256"
NotAfter = (Get-Date).AddYears(2)
}
$cert = New-SelfSignedCertificate @certParams
Export-Certificate -Cert $cert -FilePath "C:tempExchangeMCPApp.cer" | Out-Null
$pfxPassword = Read-Host "Senha do PFX" -AsSecureString
Export-PfxCertificate -Cert $cert -FilePath "C:tempExchangeMCPApp.pfx" -Password $pfxPassword | Out-Null
Write-Host "Thumbprint: $($cert.Thumbprint)"
Write-Host "Arquivos gerados em C:temp"

Depois de gerar, faça o upload do .cer no App Registration → Certificates & secrets → Certificates. Anote o Thumbprint ele vai substituir qualquer client secret no script.

Etapa 1 — Coletando os Dados do Exchange Online

Com o App Registration e o certificado no lugar, a conexão usa o CertificateThumbprint direto sem usuário, sem MFA, sem janela de login aparecendo pra quebrar o agendamento às 3 da manhã.


$AppId          = ""  # Application (client) ID
$TenantId       = ""  # Directory (tenantName)
$CertThumbprint = ""                      # Thumbprint do certificado
Connect-ExchangeOnline `
    -AppId                 $AppId `
    -CertificateThumbprint $CertThumbprint `
    -Organization          "$TenantId.onmicrosoft.com" `
    -ShowBanner:$false 
function Get-MailboxUsageReport {
    param(
        [int]$QuotaWarningPercent = 80
    )
    $mailboxes = Get-Mailbox -ResultSize Unlimited -RecipientTypeDetails UserMailbox |
        Select-Object DisplayName, UserPrincipalName, ProhibitSendQuota, ProhibitSendReceiveQuota
    $report = foreach ($mbx in $mailboxes) {
        $stats = Get-MailboxStatistics -Identity $mbx.UserPrincipalName -ErrorAction SilentlyContinue
        if ($null -eq $stats) { continue }
        $sizeStr = $stats.TotalItemSize.Value.ToString()
        $totalSizeBytes = [regex]::Match($sizeStr, '((d+) bytes)').Groups[1].Value
        if ([string]::IsNullOrEmpty($totalSizeBytes)) {
            $totalSizeBytes = 0
        }
        $limitStr = $mbx.ProhibitSendReceiveQuota.ToString()
        if ($limitStr -eq "Unlimited") {
            $limitBytes = 107374182400  # 100 GB como fallback
        } else {
            $limitMatch = [regex]::Match($limitStr, '((d+) bytes)')
            if ($limitMatch.Success) {
                $limitBytes = [int64]$limitMatch.Groups[1].Value
            } else {
                $limitBytes = 107374182400  # 100 GB como fallback
            }
        }
        $percentUsed = if ($limitBytes -gt 0) {
            [math]::Round(([int64]$totalSizeBytes / $limitBytes) * 100, 2)
        } else {
            0
        }
        [PSCustomObject]@{
            DisplayName   = $mbx.DisplayName
            UPN           = $mbx.UserPrincipalName
            TotalSizeGB   = [math]::Round($totalSizeBytes / 1GB, 3)
            LimitGB       = [math]::Round($limitBytes / 1GB, 3)
            PercentUsed   = $percentUsed
            ItemCount     = $stats.ItemCount
            LastLogonTime = $stats.LastLogonTime
            AlertLevel    = if ($percentUsed -ge 95) { "CRÍTICO" }
                            elseif ($percentUsed -ge $QuotaWarningPercent) { "ATENÇÃO" }
                            else { "OK" }
        }
    }
    return $report | Sort-Object PercentUsed -Descending
}
$usageData = Get-MailboxUsageReport -QuotaWarningPercent 80
$usageData | ConvertTo-Json -Depth 3 | Out-File "$env:TEMPexchange_usage.json" -Encoding UTF8
Write-Host "Coleta concluída. Total de mailboxes: $($usageData.Count)"
Write-Host "Críticos: $(($usageData | Where-Object AlertLevel -eq 'CRÍTICO').Count)"
Write-Host "Em atenção: $(($usageData | Where-Object AlertLevel -eq 'ATENÇÃO').Count)"

Esse script classifica cada mailbox por nível de alerta e salva tudo em JSON. É esse arquivo que o MCP Server vai ler na próxima etapa.

Etapa 2 — Construindo o MCP Server

O MCP Server é a peça central da integração. É ele que transforma as funções de coleta em ferramentas que o Copilot pode chamar durante a análise sem você precisar preparar nada na mão.

Irei deixar o link do projeto no github para download.

https://github.com/paulocostatipe/MCP-Exchange

No arquivo README você vai encontrar como configurar o MCP

Depois de realizar o readme para um teste você pode pedir direto no agente do copilot no github para iniciar o MCP e começar as fazer algumas consultas

Exemplos:

Solicitei agora uma previsão baseado nesses 10 dias de quando essa caixa pode ficar lotada

Conclusão

A diferença entre um ambiente que funciona bem e um que vive apagando incêndio geralmente não é a tecnologia é a visibilidade. Com esse fluxo, você tem clareza sobre o que vai acontecer antes de acontecer, e tempo suficiente pra agir. Com isso você pode adaptar para realizar diversas consultas, aqui é só um exemplo bem basico em um laboratorio.

PowerShell cuida da coleta, MCP conecta tudo, Copilot faz a análise.

Esse é um ponto de partida. Dá pra expandir com análise de regras de transporte, detecção de padrões de spoofing, crescimento de grupos do Teams. A estrutura já está montada é só ir adicionando as ferramentas que fazem sentido pro seu ambiente.

Gostou do conteúdo?

Se esse artigo te ajudou, compartilha com alguém da área. Deixa nos comentários quais outros relatórios você quer ver com essa abordagem DLP, auditoria de acessos, crescimento de grupos?

]]>
https://paulocostati.com.br/powershell/como-criar-relatorios-preditivos-no-exchange-online-usando-ia-e-mcp/feed/ 0 305
Exchange Server Security Update KB5071876 – Patch de Segurança que Evita Incidente em Produção https://paulocostati.com.br/exchange-server/exchange-server-security-update-kb5071876-patch-de-seguranca-que-evita-incidente-em-producao/?utm_source=rss&utm_medium=rss&utm_campaign=exchange-server-security-update-kb5071876-patch-de-seguranca-que-evita-incidente-em-producao Wed, 04 Feb 2026 21:59:07 +0000 https://paulocostati.com.br/?p=291

Exchange Server Security Update KB5071876 – Patch de Segurança que Evita Incidente em Produção

Fala Pessoal, tudo bem com vocês? Hoje vou falar um pouco sobre atualizações do Exchange

Quem administra Exchange Server aprende rápido uma coisa: os problemas mais caros não começam grandes.

Normalmente começam com um log estranho, um erro intermitente no OWA ou aquele alerta que aparece e some. Quando você percebe, já virou incidente, auditoria ou aquela ligação fora do horário.

A KB5071876, liberada em dezembro de 2025, entra exatamente nesse cenário. Ela não traz nada “novo”, mas fecha portas que você não quer deixar abertas.

Essa atualização corrige falhas que não quebram o Exchange imediatamente, mas deixam o ambiente vulnerável.

Estamos falando principalmente de:

  • Elevação de privilégio
  • Spoofing
  • Problemas em ambientes híbridos

É o tipo de coisa que fica invisível… até alguém explorar.

Elevação de privilégio: o problema que vira explicação chata

Sem esse patch, existe a possibilidade de um usuário com acesso limitado conseguir mais permissões do que deveria.

Na prática, isso vira:

  • Acesso indevido
  • Alteração que ninguém sabe quem fez
  • A pergunta clássica: “por que o servidor não estava atualizado?”

A KB5071876 fecha essa brecha.

Spoofing: quando os logs deixam de ajudar

Falha de spoofing é traiçoeira.

Tudo parece normal, mas:

  • Identidade pode ser falsificada
  • Logs ficam pouco confiáveis
  • Autenticação começa a ter comportamento estranho

Quando você realmente precisa investigar algo sério, percebe que o ambiente não está tão confiável assim.

Ambiente híbrido instável também cansa

Se você ainda tem Exchange integrado com Skype for Business, já deve ter visto:

  • Um dia funciona
  • No outro, OWA falha
  • Logs que não ajudam muito

Essa atualização corrige um problema específico nesses cenários híbridos dedicados. Não é nada espetacular, mas para de quebrar.

Por que aplicar agora (e não deixar pra depois)

A dor não é aplicar o patch. A dor é ter que:

  • Parar tudo para investigar incidente
  • Explicar falha em auditoria
  • Resolver problema sob pressão

Esse patch não melhora performance nem muda interface. Ele reduz risco — e isso já basta.

Aplicação: o básico bem feito

Nada fora do padrão do Exchange:

  • Backup antes (sempre)
  • Aplicar a atualização
  • Reiniciar o servidor
  • Validar os serviços

Se você já aplica CU, isso aqui é rotina.

Rodar o Health Checker

.\HealthChecker.ps1 -BuildHtmlReport

Não podemos esquecer do Health Checker rsrs

Checklist rápido pós-patch

  • Serviços do Exchange rodando
  • OWA abrindo normalmente
  • Outlook conectando
  • Logs sem erro estranho
  • Integrações híbridas funcionando

Se passou por isso, dá pra seguir tranquilo.

Fechando

A KB5071876 não é empolgante.
Mas ela cura dores clássicas de quem administra Exchange:

  • Incidente de segurança
  • Auditoria chata
  • Ambiente híbrido instável
  • Investigação que começa tarde demais

É aquele patch que você aplica hoje pra não perder tempo amanhã.

]]>
291
Painel Visual no IIS para Monitorar Serviços de Vários Servidores Usando PowerShell https://paulocostati.com.br/powershell/painel-visual-no-iis-para-monitorar-servicos-de-varios-servidores-usando-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=painel-visual-no-iis-para-monitorar-servicos-de-varios-servidores-usando-powershell Fri, 17 Oct 2025 00:09:49 +0000 https://paulocostati.com.br/?p=269

Painel Visual no IIS para Monitorar Serviços de Vários Servidores Usando PowerShell

Fala pessoal, tudo bem com vocês?

Imagine o cenário mais comum para qualquer administrador de TI: uma infraestrutura em crescimento, dezenas de servidores e a necessidade incessante de garantir o funcionamento de serviços críticos como o IIS (w3svc), Gerenciamento Remoto (WinRM) e Fila de Impressão (Spooler).

O método tradicional—abrir dezenas de sessões RDP, rodar Get-Service manualmente e verificar logs—é ineficiente, insustentável e impossível de escalar. A informação está dispersa e o tempo é perdido em cliques repetitivos.

A solução? Criar uma Central de Comando leve, visual e proativa, utilizando apenas duas ferramentas nativas e poderosas: PowerShell (para automação e coleta de dados) e IIS (para hospedagem e visualização).

Este projeto é dividido em três etapas claras: configurar o servidor central (IIS), enviar dados dos servidores remotos e gerar o painel visual.

1. Configurando o Servidor Central (O Painel IIS)

 

O script inicial prepara o ambiente. Ele instala o IIS, adiciona os recursos necessários e cria a estrutura de pastas que funcionará como a base de dados centralizada, definindo permissões de escrita para garantir que os servidores remotos possam enviar seus logs.

				
					<#
    .DESCRIPTION
    Script para configurar o IIS e preparar o ambiente para o Painel de Serviços.
    .AUTHOR
    Paulo Costa
#>

# Instalar IIS e recursos essenciais
Write-Host "Iniciando a instalação do IIS e componentes básicos..."
Install-WindowsFeature -Name Web-Server,Web-WebServer,Web-Common-Http,Web-Static-Content,Web-Default-Doc,Web-ASP -IncludeManagementTools -Confirm:$false

# Definir Caminhos
$PainelPath = "C:\inetpub\wwwroot\painel"
$LogsPath = "$PainelPath\logs"

# Criar a estrutura de pastas do Painel
if (-not (Test-Path $PainelPath)) { 
    New-Item -Path $PainelPath -ItemType Directory -Force
    Write-Host "Pasta principal do Painel criada: $PainelPath"
}
if (-not (Test-Path $LogsPath)) { 
    New-Item -Path $LogsPath -ItemType Directory -Force
    Write-Host "Pasta de Logs criada: $LogsPath"
}

# Configurar Permissões de Escrita (MUITO IMPORTANTE: Ajuste 'Everyone' conforme sua política de segurança)
Write-Host "Configurando permissões na pasta de Logs para permitir escrita remota..."
$acl = Get-Acl $LogsPath
# Concede permissão de Modificação (Modify) para o usuário 'Everyone'
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Everyone","Modify","ContainerInherit,ObjectInherit","None","Allow")
$acl.SetAccessRule($rule)
Set-Acl $LogsPath $acl

# Criar o arquivo HTML inicial (Placeholder)
$HtmlPath = "$PainelPath\index.html"
@"
<html>
<head><title>Painel de Serviços</title></head>
<body>
    <div style="font-family: monospace; padding: 20px; background-color: #1e1e1e; color: #dcdcdc;">
        <h2>Painel de Serviços - Inicializando...</h2>
        <p>Aguardando a primeira execução do script central para gerar o relatório.</p>
    </div>
</body>
</html>
"@ | Out-File $HtmlPath -Encoding UTF8

Write-Host "IIS configurado e Painel pronto para receber logs!"

				
			

2. O Agente de Coleta Remota (Rodando em Cada Servidor)

Este é o script que transforma cada servidor em um “agente de campo”. Ele verifica o status de uma lista predefinida de serviços e, o ponto crucial, salva o resultado em um arquivo de log nomeado com o nome do próprio computador no caminho de rede centralizado.

Atenção: Agende este script via Task Scheduler para rodar a cada 5 minutos em todos os servidores que você deseja monitorar.

				
					<#
.DESCRIPTION
    Script para verificar o status de serviços essenciais e registrar em log centralizado.
    Gera arquivo TXT com o status atual do servidor, usando o nome da máquina.

.AUTHOR
    Paulo Costa

.VERSION
    1.2
.NOTES
    Este script sobrescreve o arquivo de log a cada execução para fornecer o status mais atual.
    Execução recomendada: via Task Scheduler a cada 15 minutos
#>

[CmdletBinding()]
param(
    [string]$LogDir = '\\NomeServidor\inetpub\wwwroot\painel\logs', 
    [switch]$VerboseOutput
)

## CONFIGURAÇÕES
$ErrorActionPreference = 'Stop'
$InformationPreference = if ($VerboseOutput) { 'Continue' } else { 'SilentlyContinue' }

Write-Information "Iniciando verificação de serviços em $(Get-Date -Format 'dd/MM/yyyy HH:mm:ss')"

$LogPath = Join-Path $LogDir "$env:COMPUTERNAME.txt"

try {
    if (-not (Test-Path $LogDir)) { New-Item -Path $LogDir -ItemType Directory -Force | Out-Null }
    Write-Information "Pasta de logs verificada: $LogDir"
} catch { 
    Write-Error "Não foi possível acessar ou criar a pasta de logs: $_"
    exit 1 
}

try {
    Write-Information "Obtendo e processando dados dos serviços..."
    
    $CurrentTime = Get-Date -Format 'dd/MM/yyyy HH:mm:ss'
    
    $Resultado = Get-Service | 
        Where-Object { 
            # Filtra serviços que estão em status relevante (Running, Stopped, Paused)
            $_.Status -in @('Running', 'Stopped', 'Paused') 
        } | 
        ForEach-Object {
            # Formato de saída exato: Servico;Status;Data
            "$($_.Name);$($_.Status);$CurrentTime" 
        }
    
    Write-Information "Total de logs formatados: $($Resultado.Count)"
    
    $Resultado | Out-File -FilePath $LogPath -Encoding UTF8 -Force
    
    Write-Host "Log de status atualizado com sucesso em $LogPath"

} catch {
    Write-Error "Erro ao obter ou salvar status dos serviços: $_"
    exit 1
}
				
			

 

3. A Central de Processamento (Gerador do Painel HTML)

Este script deve rodar no Servidor IIS (o servidor central) em um intervalo de tempo ligeiramente maior (ex: a cada 5 minutos, garantindo que os logs dos agentes já tenham chegado). Ele lê todos os logs, os consolida e gera o arquivo index.html visualmente aprimorado, utilizando CSS para sinalizar o status de forma clara e imediata.

Script de Geração do Painel HTML

Ao acessar o URL do seu IIS, o administrador tem uma visão instantânea, eliminando a necessidade de RDP. O uso de cores vibrantes sobre o fundo escuro garante que os problemas (vermelho e amarelo) saltem imediatamente aos olhos.

E aí, o que vocês acharam desse painel?

]]>
269
Monitore Logon e Logoff no Windows com PowerShell – Versão Melhorada https://paulocostati.com.br/windows-server/monitore-logon-e-logoff-no-windows-com-powershell-versao-melhorada/?utm_source=rss&utm_medium=rss&utm_campaign=monitore-logon-e-logoff-no-windows-com-powershell-versao-melhorada Tue, 30 Sep 2025 11:39:57 +0000 https://paulocostati.com.br/?p=255

Fala pessoal, tudo bem com vocês?

No post anterior eu mostrei como usar PowerShell para monitorar e automatizar serviços do Windows.

Agora eu trago uma versão melhorada e mais completa, voltada para quem precisa auditar logons e logoffs de usuários, seja em servidores ou estações de trabalho.


O que essa versão traz de novo

Com esse script você vai conseguir:

  • Coletar eventos de Logon (4624), Logoff (4634) e Logoff de usuário (4647).
  • Definir a quantidade de dias que deseja analisar.
  • Gerar relatórios em dois formatos:
    • CSV – perfeito para Excel ou Power BI.
    • HTML – visual limpo e pronto para abrir no navegador.
  • Obter informações importantes como:
    • Data do evento
    • Usuário
    • Tipo de logon
    • Máquina de origem

Tudo isso de forma automatizada, com mensagens claras durante a execução.


Requisitos

Antes de rodar, verifique:

  • PowerShell 5 ou superior (já vem no Windows 10/11 e Windows Server 2016+).
  • Executar como Administrador (o log de segurança exige permissão elevada).

Como usar

  1. Copie o script abaixo e salve como, por exemplo: C:\\Scripts\\Relatorio-LogonLogoff.ps1
  2. Abra o PowerShell como Administrador.
  3. Execute: .\\Relatorio-LogonLogoff.ps1
  4. Informe o número de dias de eventos que deseja coletar.
  5. O script cria a pasta: C:\\Temp\\LogonLogoff E salva lá os relatórios:
    • Relatorio-Logonlogoff.csv
    • Relatorio-Logonlogoff.html

Script

Write-Host "Iniciando coleta de eventos de Logon/Logoff..." -ForegroundColor Cyan

try {
    [int]$Dias = Read-Host "Quantos dias de eventos você deseja coletar?"
}
catch {
    Write-Host "Entrada inválida. Por favor, insira um número inteiro (ex: 10)." -ForegroundColor Red
    return
}

$OutputFolder = "C:\\Temp\\LogonLogoff"
$OutputCsv = "$OutputFolder\\Relatorio-Logonlogoff.csv"
$OutputHtml = "$OutputFolder\\Relatorio-Logonlogoff.html"

$ReportDate = Get-Date -Format "dd/MM/yyyy HH:mm:ss"
$ComputerName = $env:COMPUTERNAME
$ReportCreator = $env:USERNAME

Write-Host "Verificando/Criando o diretório de saída: $OutputFolder" -ForegroundColor Blue
if (-not (Test-Path $OutputFolder)) {
    try {
        New-Item -Path $OutputFolder -ItemType Directory -Force | Out-Null
        Write-Host "Diretório '$OutputFolder' criado com sucesso!" -ForegroundColor Green
    }
    catch {
        Write-Host "Erro ao criar o diretório. Por favor, verifique suas permissões." -ForegroundColor Red
        return
    }
}

Write-Host "Buscando eventos dos últimos '$Dias' dias..." -ForegroundColor Blue
Write-Progress -Activity "Coletando eventos..." -Status "Isso pode levar alguns minutos..." -PercentComplete 10

try {
    $Events = Get-WinEvent -FilterHashtable @{
        LogName   = 'Security'
        Id        = 4624, 4634, 4647
        StartTime = (Get-Date).AddDays(-$Dias)
    } | Select-Object @{Name='Data do Evento'; Expression={$_.TimeCreated}},
        Id,
        @{Name='Usuário'; Expression={$_.Properties[5].Value}},
        @{Name='Tipo de Logon'; Expression={
            switch ($_.Properties[8].Value) {
                2 { "Interativo (Local)" }
                3 { "Rede" }
                4 { "Batch" }
                5 { "Serviço" }
                7 { "Desbloquear (Tela)" }
                10 { "RemoteInteractive (RDP/Terminal)" }
                default { "Outros" }
            }
        }},
        @{Name='Máquina de Origem'; Expression={$_.Properties[11].Value}}

    Write-Progress -Activity "Coletando eventos..." -Status "Coleta concluída. Salvando relatórios..." -PercentComplete 50

    $Events | Export-Csv -Path $OutputCsv -NoTypeInformation -Delimiter ';'
    Write-Host "Relatório CSV salvo em: $OutputCsv" -ForegroundColor Green

    $HtmlHeader = @"
<head>
    <title>Relatório de Logon/Logoff dos últimos $Dias dias</title>
    <style>
        body { font-family: Arial, sans-serif; background-color: #f4f4f4; color: #333; margin: 20px; }
        h1 { color: #0056b3; text-align: center; }
        .header-info { text-align: center; margin-bottom: 20px; }
        .header-info p { margin: 5px 0; font-size: 14px; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { padding: 12px 15px; text-align: left; border-bottom: 1px solid #ddd; }
        th { background-color: #007bff; color: white; }
        tr:nth-child(even) { background-color: #f9f9f9; }
        tr:hover { background-color: #f1f1f1; }
    </style>
</head>
"@
    $HtmlBody = @"
<body>
    <div class="header-info">
        <h1>Relatório de Logon/Logoff dos últimos $Dias dias</h1>
        <p><strong>Relatório Gerado em:</strong> $ReportDate</p>
        <p><strong>Computador:</strong> $ComputerName</p>
        <p><strong>Criado por:</strong> $ReportCreator</p>
    </div>
"@

    $EventsHtmlTable = $Events | ConvertTo-Html -As Table -Fragment
    $HtmlContent = "<html>" + $HtmlHeader + $HtmlBody + $EventsHtmlTable + "</body></html>"
    $HtmlContent | Out-File -FilePath $OutputHtml -Encoding UTF8

    Write-Host "Relatório HTML salvo em: $OutputHtml" -ForegroundColor Green
    Write-Progress -Activity "Coletando eventos..." -Status "Relatórios prontos!" -PercentComplete 100
    Start-Sleep -Seconds 2
}
catch {
    Write-Host "Ocorreu um erro ao coletar os eventos. Verifique se o script está rodando como Administrador e se você tem eventos de segurança disponíveis." -ForegroundColor Red
}


Resultado

O relatório em HTML final traz uma tabela bem organizada com todos os eventos coletados, pronta para:

  • consulta rápida,
  • envio em relatórios internos,
  • ou até integração em um processo de auditoria.

Conclusão

Esse script deixa o processo de auditoria de logon/logoff muito mais simples e visual.

Se você já faz esse tipo de análise no dia a dia, pode usar essa versão como base e adaptá-la conforme a sua necessidade.

E aí, o que vocês acharam dessa versão melhorada?

Deixem nos comentários como vocês fazem o monitoramento de logon/logoff no ambiente de vocês!

]]>
255
Cansado de tarefas manuais? Automatize tudo no Windows Server com PowerShell! https://paulocostati.com.br/windows-server/cansado-de-tarefas-manuais-automatize-tudo-no-windows-server-com-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=cansado-de-tarefas-manuais-automatize-tudo-no-windows-server-com-powershell Sat, 20 Sep 2025 09:00:00 +0000 https://paulocostati.com.br/?p=250

Cansado de tarefas manuais? Automatize tudo no Windows Server com PowerShell!

Fala, pessoal, tudo bem com vocês?

Se você trabalha com administração de servidores, sabe que a rotina pode ser exaustiva. Gerenciar serviços, criar usuários, fazer backups… é um trabalho manual e que consome um tempo enorme. A boa notícia é que o PowerShell chegou para transformar essa rotina! Com ele, você automatiza tarefas repetitivas, economiza tempo e minimiza erros, podendo focar em coisas mais importantes.

Neste post, vou mostrar como automatizar as tarefas mais comuns para você dizer adeus ao trabalho manual.

Gerenciamento de Serviços: Fique no controle!

Manter os serviços essenciais do Windows Server funcionando é fundamental. O PowerShell permite que você gerencie esses serviços facilmente, seja para iniciar, parar ou apenas verificar o status.

  • Verificar o Status: Use Get-Service para ver o status de todos os serviços no servidor. Se quiser checar um específico, como o Windows Update, use Get-Service -Name wuauserv

  • Iniciar ou Parar: Para iniciar ou parar um serviço, os cmdlets são Start-Service e Stop-Service. Por exemplo, para iniciar o Windows Update, o comando é Start-Service -Name wuauserv.

    Para pará-lo, use Stop-Service -Name wuauserv

Scripts que trabalham para você

A cereja do bolo é criar um script que verifica se um serviço está parado e, se estiver, o inicia automaticamente. Isso garante a alta disponibilidade de serviços críticos.

				
					$servico = Get-Service -Name wuauserv
if ($servico.Status -eq 'Stopped') {
    Start-Service -Name wuauserv
    Write-Host "Serviço Windows Update iniciado."
} else {
    Write-Host "O serviço já está em execução."
}
				
			

Onde aplicar essa automação?

Essa automação é super útil para:

  • Garantir que serviços críticos como o SQL Server ou o Exchange estejam sempre em execução.

  • Automatizar a inicialização de serviços após uma reinicialização do servidor.

  • Monitorar e manter a saúde do seu ambiente sem precisar entrar no servidor a todo momento.

]]>
250
Monitore e Automatize Serviços do Windows com PowerShell https://paulocostati.com.br/windows-server/monitore-e-automatize-servicos-do-windows-com-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=monitore-e-automatize-servicos-do-windows-com-powershell Tue, 16 Sep 2025 23:00:23 +0000 https://paulocostati.com.br/?p=237

Monitore e Automatize Serviços do Windows com PowerShell

Fala pessoal, tudo bem com vocês?

Já aconteceu de um serviço crítico parar de funcionar e você descobrir tarde demais?
Neste post, vou te mostrar como monitorar serviços do Windows automaticamente usando PowerShell, gerar relatórios diários e até reiniciar serviços parados — tudo de forma simples, prática e segura.

O que você vai aprender

  • Monitorar serviços essenciais (IIS, SQL Server, Exchange, etc.).

  • Reiniciar serviços automaticamente se eles estiverem parados.

  • Gerar relatórios HTML de status para auditoria.

  • Automatizar a execução diária com Task Scheduler.

				
					<#
.DESCRIPTION
Monitora serviços do Windows, reinicia se estiverem parados e gera relatório HTML.
.AUTHOR
Paulo Costa
.VERSION
1.0
#>

param(
    [String[]]$servicos = @("Spooler", "wuauserv", "BITS"), # Serviços para monitorar, adicione ou remova conforme necessário
    [String]$ReportFolder = "C:\ServiceReports\" # Pasta onde o relatório será salvo
)

if (-not (Test-Path $ReportFolder)) { New-Item -ItemType Directory -Path $ReportFolder -Force | Out-Null }
$ReportFile = Join-Path $ReportFolder ("ServiceReport_" + (Get-Date -Format "yyyyMMdd_HHmmss") + ".html")

$ReportData = @()

foreach ($svc in $servicos) {
    try {
        $servico = Get-Service -Name $svc -ErrorAction Stop
        $statusBefore = $servico.Status

        if ($servico.Status -ne "Running") {
            Start-Service -Name $svc -ErrorAction SilentlyContinue
            Start-Sleep -Seconds 3
            $servico.Refresh()
        }

        $ReportData += [PSCustomObject]@{
            Serviço = $svc
            StatusAnterior = $statusBefore
            StatusDepois  = $servico.Status
            Data    = Get-Date
        }
    } catch {
        $ReportData += [PSCustomObject]@{
            Serviço = $svc
            StatusAnterior = "Erro"
            StatusDepois  = "Erro"
            Data    = Get-Date
        }
    }
}

$Html = $ReportData | Sort-Object Serviço | ConvertTo-Html `
    -Title "Relatório de Serviços - $env:COMPUTERNAME" `
    -PreContent "<h2>Relatório de Serviços do Windows - $env:COMPUTERNAME</h2><p>Gerado em: $(Get-Date)</p>" `
    -PostContent "<p style='font-size:12px;color:gray;'>Script desenvolvido por Paulo Costa</p>"

$Html | Out-File -FilePath $ReportFile -Encoding UTF8
Write-Host "Relatório gerado: $ReportFile" -ForegroundColor Green

				
			

Automatizando a execução

Para rodar diariamente sem intervenção:

  1. Abra Task Scheduler.

  2. Crie Basic Task → Nome: Monitorar Serviços.

  3. Trigger: Daily → Hora desejada.

  4. Action: Start a Program → powershell.exe

    • Add arguments: -File "C:\temp\Services.ps1"

  5. Salve e teste.

Agora você terá relatórios diários automáticos e os serviços sempre monitorados.

]]>
237
Certification Weeks Microsoft & Fast Lane: Treinamento gratuito + Certificação oficial! https://paulocostati.com.br/microsoft/certification-weeks-microsoft-fast-lane-treinamento-gratuito-certificacao-oficial/?utm_source=rss&utm_medium=rss&utm_campaign=certification-weeks-microsoft-fast-lane-treinamento-gratuito-certificacao-oficial Fri, 29 Aug 2025 16:35:21 +0000 https://paulocostati.com.br/?p=220

Certification Weeks Microsoft & Fast Lane: Treinamento gratuito + Certificação oficial!

A Microsoft, em parceria com a Fast Lane, está oferecendo a oportunidade perfeita para quem deseja elevar a carreira em TI: treinamentos intensivos, online e gratuitos, com direito a voucher oficial de exame de certificação Microsoft.

Datas e Trilhas Disponíveis

  • Cloud, AI & Security: 22–26 de setembro

  • AI Business Solutions: 29 de setembro–3 de outubro

Pré-requisitos para participar

  • Trabalhar em uma empresa parceira Microsoft

  • Usar e-mail corporativo no cadastro (ex.: @empresa.com.br)

  • Participar de todas as sessões ao vivo (gravações não contam para o voucher)

  • Concluir os labs práticos disponibilizados pela Skillable

  • Apenas 1 voucher por pessoa

Como funciona na prática

  1. Inscreva-se na trilha desejada:

  2. Participe das aulas ao vivo durante a semana do evento

  3. Conclua os laboratórios práticos (Skillable) — acesso por 30 dias

  4. Receba o voucher gratuito por e-mail após validação

  5. Agende seu exame oficial Microsoft e conquiste a certificação

Por que vale a pena?

  • Capacitação com instrutores especialistas

  • Conteúdo atualizado sobre Azure, AI, Segurança, Power Platform, Dynamics 365 e muito mais

  • Hands-on labs para fixação prática

  • Certificação oficial que agrega valor ao currículo

]]>
220
Cansado de caçar logs no Event Viewer? Veja como automatizar relatórios de Logon/Logoff com PowerShell​ https://paulocostati.com.br/windows-server/cansado-de-cacar-logs-no-event-viewer-veja-como-automatizar-relatorios-de-logon-logoff-com-powershell/?utm_source=rss&utm_medium=rss&utm_campaign=cansado-de-cacar-logs-no-event-viewer-veja-como-automatizar-relatorios-de-logon-logoff-com-powershell Wed, 27 Aug 2025 00:07:42 +0000 https://paulocostati.com.br/?p=209

Cansado de caçar logs no Event Viewer? Veja como automatizar relatórios de Logon/Logoff com PowerShell

Fala pessoal, tudo bem com vocês?
No post de hoje eu vou mostrar como usar PowerShell para gerar relatórios de logon e logoff de usuários no Windows.

Recebi recentemente mensagens de colegas de TI dizendo que estavam com dificuldades para acompanhar os acessos dos usuários em servidores e estações de trabalho. O Event Viewer até guarda tudo, mas vamos combinar: procurar evento por evento é cansativo, manual e nada produtivo.

A boa notícia é que dá para automatizar tudo com PowerShell e ter um relatório claro, pronto para auditorias, segurança ou até para resolver chamados de suporte.

 

Onde estão essas informações?

O Windows registra tudo no Log de Segurança. Para logon e logoff, os eventos principais são:

  • 4624 → Logon realizado com sucesso
  • 4634 → Logoff realizado
  • 4647 → Logoff iniciado pelo próprio usuário

Combinando esses três, conseguimos montar um relatório completo de entradas e saídas.

 

Script em PowerShell – CSV + HTML

Aqui está um script que vai além: ele gera tanto um CSV para análise crua quanto um HTML bem formatado para consulta rápida.

				
					Write-Host "Iniciando coleta de eventos de logon e logoff..." -ForegroundColor Cyan

## aqui você pode alterar para a quantidade de dias e o local de onde salvar
$Dias = 2
$OutputCsv = "C:\Temp\Relatorio-LogonLogoff.csv"
$OutputHtml = "C:\Temp\Relatorio-LogonLogoff.html"

#Pode alterar a quantidade de eventos...
$Events = Get-WinEvent -LogName Security -MaxEvents 100 | Where-Object {
    $_.Id -in 4624,4634,4647 -and $_.TimeCreated -gt (Get-Date).AddDays(-$Dias)
} | Select-Object TimeCreated, Id, @{Name="Usuario";Expression={$_.Properties[5].Value}}, MachineName

# Exporta para CSV
$Events | Export-Csv -Path $OutputCsv -NoTypeInformation -Encoding UTF8

# Exporta para HTML
$Html = $Events | ConvertTo-Html -Property TimeCreated,Id,Usuario,MachineName -Title "Relatório de Logon/Logoff" | Out-String
$Html | Set-Content $OutputHtml -Encoding UTF8

Write-Host "Relatórios gerados com sucesso:" -ForegroundColor Green
Write-Host "CSV: $OutputCsv"
Write-Host "HTML: $OutputHtml"
				
			

Resultado

 CSV – Para quem precisa importar em Excel ou Power BI.
 HTML – Para abrir no navegador, com visual limpo e fácil de entender.

Como evoluir esse script

Esse é só o começo. Você pode levar a automação ainda mais longe:

  • Enviar o HTML por e-mail diariamente usando Send-MailMessage
  • Agendar no Task Scheduler para rodar automaticamente
  • Centralizar logs de vários servidores e gerar relatórios unificados
  • Integrar com SIEM (Microsoft Sentinel, Splunk, etc.

Conclusão

Com algumas linhas de PowerShell, você já transforma um trabalho manual e chato em um relatório automático e organizado. Isso economiza tempo, dá mais controle sobre o ambiente e facilita auditorias de segurança.

Agora quero saber de vocês:
Hoje, como vocês monitoram logon/logoff no ambiente?
Esse tipo de relatório ajudaria no dia a dia da sua equipe?

Deixa aqui nos comentários que vou adorar saber.

]]>
209