Pontos principais
- Monte um inventário de usuários com o módulo Microsoft Graph PowerShell usando Get-MgUser e depois acrescente métricas de uso do Graph Reports.
- Enriqueça o inventário com métricas de caixas de correio do Exchange Online para sinalizar caixas grandes demais, contas inativas e candidatos à migração.
- Padronize os nomes das propriedades e a nomenclatura das exportações para que os conjuntos de dados se combinem sem ruído e fiquem prontos para auditoria em todos os tenants.
- Automatize a coleta com autenticação somente de aplicativo, lógica de nova tentativa e logs estruturados para manter os fluxos não assistidos seguros e estáveis.
Os relatórios de atividade de usuários do Microsoft 365 (antigo Office 365) são essenciais para acompanhar o uso dos serviços, garantir a produtividade dos clientes e manter a segurança e a conformidade. Usar o PowerShell cria uma abordagem única para reunir insights práticos em Exchange Online, Teams, SharePoint e OneDrive.
Como coletar relatórios de atividade de usuários da Microsoft com PowerShell
O Microsoft Graph PowerShell entrega dados de alta qualidade e filtros poderosos. Com PowerShell, dá para combinar inventário de usuários, uso e métricas de caixas de correio em um pipeline centralizado que apoia a otimização de licenças, a governança de acessos e as investigações de incidentes.
Para montar esse cenário, você precisa do seguinte:
- PowerShell 7 ou superior, com os módulos do Microsoft Graph e do Exchange Online instalados.
- Registro de aplicativo no Azure com escopos do Graph de privilégio mínimo, como Group.Read.All e Reports.Read.All, além do consentimento.
- Permissões opcionais no Exchange Online para estatísticas de caixas de correio.
- Armazenamento seguro de credenciais e um caminho de saída central para CSV e JSON.
Etapa 1: inventariar usuários com o módulo Microsoft Graph PowerShell
Um inventário completo de usuários é a base para monitorar e gerenciar clientes do Microsoft 365. O script abaixo captura apenas os detalhes mais relevantes de cada usuário, o que reduz o tempo de execução e mantém o processo eficiente em escala.
Ao manter o mesmo formato de exportação CSV em todos os tenants, cada relatório segue a mesma estrutura. Assim fica fácil comparar, mesclar e enriquecer os dados depois com fontes como o Microsoft Graph Reports ou o Exchange Online.
Exemplo de script PowerShell para inventário de usuários
Install-Module Microsoft.Graph -Scope CurrentUserImport-Module Microsoft.GraphConnect-MgGraph -Scopes "User.Read.All","Reports.Read.All"Get-MgUser -All -Property "id,displayName,userPrincipalName,mail,accountEnabled,createdDateTime,assignedLicenses" |Select-Object id,displayName,userPrincipalName,mail,accountEnabled,createdDateTime, @{n='LicenseCount';e={$_.assignedLicenses.Count}} |Export-Csv "C:\Reports\M365_Users.csv" -NoTypeInformation |
Você pode omitir algumas propriedades da linha Get-MGUser -All -Propertypara controlar o escopo da consulta.
Etapa 2: acrescentar métricas de uso com a API do Graph Reports
O Graph Reports mostra detalhes da atividade dos usuários nos diversos serviços do Microsoft 365. Isso revela contas ociosas e áreas de uso concentrado, ajudando a decidir onde desprovisionar e onde fazer upgrade de licenças.
Exemplos de scripts PowerShell para a API do Graph Reports
O script a seguir recupera a atividade por usuário em diferentes cargas de trabalho dentro de um período definido.
Get-MgReportOffice365ActiveUserDetail -Date (Get-Date).AddDays(-1) -OutFile "C:\Reports\ActiveUserDetail.csv" |
Repare que o script acima solicita os dados de ontem, indicados por .AddDays (-1). Como alternativa, dá para usar períodos móveis como estes:
# Last 7 daysGet-MgReportOffice365ActiveUserDetail -Period D7 -OutFile "C:\Reports\ActiveUserDetail_D7.csv"# Last 30 daysGet-MgReportOffice365ActiveUserDetail -Period D30 -OutFile "C:\Reports\ActiveUserDetail_D30.csv" |
Depois, combine o CSV gerado com a lista de inventário da etapa 1 para identificar contas inativas ou pouco ativas por carga de trabalho:
$inv = Import-Csv "C:\Reports\M365_Users.csv" # From step 1$usage = Import-Csv "C:\Reports\ActiveUserDetail.csv" # From step 2$joined = $inv | Join-Object -On userPrincipalName -Right $usage -Kind Left # or use a custom hash join# Alternative without a module: build a hash on UPN for the usage file and add the fields you need$joined | Export-Csv "C:\Reports\M365_Users_Usage.csv" -NoTypeInformation |
Etapa 3: enriquecer o inventário com métricas de caixas de correio do Exchange Online
Incluir métricas de caixas de correio no inventário revela caixas grandes demais ou em crescimento acelerado antes que elas atrapalhem a produtividade do cliente. Além disso, garante a manutenção correta das contas e políticas dos clientes e ajuda os administradores a migrar caixas de correio do Exchange Online sem sobressaltos.
Exemplo de script PowerShell para consultar métricas do Exchange Online
O script a seguir conecta você ao serviço Exchange Online do Microsoft 365 e recupera as principais métricas de caixa de correio por usuário. Isso ajuda os administradores a entender o uso das caixas, trazendo dados como tamanho da caixa, número de itens, itens excluídos, horário do último logon e limites de armazenamento.
Connect-ExchangeOnline -UserPrincipalName [email protected]Get-MailboxStatistics -Identity [email protected] |
Execute o script para usuários que atendam a estes critérios:
- Crescimento acelerado da caixa de correio
- Caixas com muito armazenamento ou perto da cota
- Caixas VIP, compartilhadas ou de recursos
- Candidatos à migração
- Usuários sensíveis do ponto de vista de conformidade
Etapa 4: padronizar, exportar e armazenar os relatórios de atividade de usuários do Microsoft 365
Depois de extrair métricas com Get-MgUser, Graph Reports e Exchange Online, elas não se encaixam automaticamente. A normalização gera exportações padronizadas, com um formato de dados consistente que simplifica a automação e permite repetir o processo em vários tenants.
Plano de ação recomendado:
- Padronize os nomes das propriedades e acrescente campos calculados, como LicenseCount, IsEnabled e AsOf, para que os conjuntos de dados se combinem sem ruído.
- Exporte em CSV para os operadores e em JSON para painéis e automações.
- Nomeie cada arquivo com o ID do tenant, a janela de tempo e a versão do script para facilitar auditorias. Por exemplo:
- users_{TenantId}_{Window}_{ScriptVersion}.csv
- users_{TenantId}_{Window}_{ScriptVersion}.json
Etapa 5: automatizar fluxos com autenticação segura e logs
Padronização somada a automação permite replicar os mesmos fluxos em vários tenants. Com logins seguros, os scripts rodam sem supervisão e no horário programado.
Automatizar nova tentativa e recuo mantém os jobs estáveis mesmo quando o Microsoft 365 limita as requisições. Já os logs estruturados comprovam a eficácia do script, registrando o que foi executado e quais métricas foram geradas.
Plano de ação recomendado:
- Use autenticação somente de aplicativo para que os scripts não assistidos rodem sem interrupções.
- Configure nova tentativa e recuo para preservar a estabilidade da coleta diante da limitação de API.
- Mantenha um log detalhado das execuções, com horários de início e término, filtros e contagem de registros, para garantir rastreabilidade em auditorias ou revisões.
- Programe verificações frequentes de inventário e atualizações semanais de atividade para manter os relatórios atuais sem custos desnecessários.
- Se você é MSP, use loops do PowerShell para percorrer os clientes e gerar relatórios separados por tenant.
Etapa 6: colocar os relatórios de usuários do Microsoft 365 em operação
Depois de reunir todos os dados, operacionalizar as descobertas é o que transforma métricas brutas em insights acionáveis. Integrando as exportações às práticas de conformidade, governança e revisão de serviços, você ganha visibilidade sobre a operação do cliente.
Isso ajuda os clientes a tomar decisões embasadas e a reduzir riscos. Também permite entregar planos sustentados por evidências, com melhorias de serviço mensuráveis.
Plano de ação recomendado:
- Anexe os extratos de usuários e atividades aos pacotes de conformidade para comprovar que os registros de acesso estão corretos e que o uso de dados é monitorado.
- Cruze os relatórios com avisos do RH ou do diretório para detectar usuários inativos, acessos obsoletos ou licenças órfãs.
- Mostre os destaques nas QBRs para evidenciar tendências de adoção, crescimento de uso ou redução de risco.
- Arquive os relatórios para criar uma base factual que acelere a análise pós-incidente e a resolução.
Automatize a coleta dos relatórios de usuários do Microsoft 365
Processos manuais na coleta atrasam a análise por causa da repetição e ainda elevam o custo operacional. Com automação, a coleta de dados vira um processo consistente e padronizado, com menos erro humano.
Exemplos de pontos de automação:
- Crie um job noturno que exporte os inventários de usuários com o módulo Microsoft Graph PowerShell.
- Programe scripts semanais que coletem detalhes dos usuários ativos e um job direcionado que reúna estatísticas das caixas de correio dos usuários sinalizados.
- Automatize a geração de exportações com carimbo de data/hora e o envio delas para o repositório de evidências.
Recursos do NinjaOne para coletar relatórios de atividade de usuários do Microsoft 365
NinjaOne melhora a forma de coletar e gerenciar relatórios de atividade de usuários do Microsoft Office 365 com automação, segurança e escalabilidade.
- Implantação remota de scripts: execute na hora scripts do Graph Report, do Exchange Online e do Microsoft Graph PowerShell de forma centralizada e em escala com o script remoto do NinjaOne
- Automações agendadas: use o recurso de automações agendadas para rodar os scripts de coleta em intervalos predefinidos, como na inicialização do sistema ou no login do usuário.
- Campos personalizados seguros: guarde credenciais sensíveis em campos personalizados seguros e acesse essas informações de forma centralizada por scripts PowerShell.
- Recursos completos de scripts: crie scripts PowerShell personalizados para automatizar inventários de usuários, identificar usuários inativos por carga de trabalho ou apontar candidatos à otimização de licenças, entre outras possibilidades.
Os recursos de script remoto e agendamento do NinjaOne ainda simplificam os fluxos baseados em PowerShell, viabilizando implantações centralizadas e multi-tenant.
Otimize a coleta de relatórios de usuários do Microsoft 365 com PowerShell
Com a descontinuação dos módulos MSOnline e AzureAD, a migração para o Microsoft Graph PowerShell trouxe uma abordagem moderna e unificada para coletar dados nos serviços do Microsoft 365.
Ao unir automação segura, exportações normalizadas e pacotes de evidências bem organizados, as equipes transformam métricas brutas em visibilidade operacional acionável, que sustenta auditorias, otimiza o uso de licenças e acelera investigações de incidentes.
Temas relacionados:
- Como usar a API do Microsoft Graph para extrair relatórios de conformidade em vários tenants
- Como automatizar notificações de mudança de função no Microsoft 365 para supervisão de administradores
- Como executar verificações agendadas na API do Graph para licenças expiradas e usuários inativos
- Como usar a API do Microsoft Graph com o Windows PowerShell para monitorar e gerenciar clientes do Microsoft 365
