/
/

Zo haalt u Microsoft 365-gebruikersactiviteitsrapporten op met PowerShell

door Team Ninja
How to Get Microsoft 365 User Activity Reports using PowerShell blog banner image

Directe samenvatting

Deze blogpost van NinjaOne biedt een uitgebreide basislijst met CMD-commands en een deep dive duik in Windows-commands met meer dan 70 essentiële cmd-commands voor zowel beginners als gevorderden. Het legt praktische opdrachtpromptcommando’s uit voor file management, directory navigation, network troubleshooting, disk operations en automatisering met echte voorbeelden om de productiviteit te verbeteren. Of u nu fundamentele cmd-commands leert of geavanceerde Windows CLI-tools onder de knie krijgt, deze gids helpt u de Command Prompt effectiever te gebruiken.

Belangrijkste punten

  • Bouw een gebruikersinventaris op met de Microsoft Graph PowerShell-module via Get-MgUser en voeg daarna gebruiksstatistieken uit Graph Reports toe.
  • Verrijk inventarissen met mailboxstatistieken uit Exchange Online om te grote mailboxen, inactieve accounts en migratiekandidaten te signaleren.
  • Normaliseer eigenschapsnamen en standaardiseer de naamgeving van exports zodat datasets netjes samenvallen en in elke tenant auditklaar blijven.
  • Automatiseer het verzamelen met app-only-authenticatie, retrylogica en gestructureerde logging zodat onbeheerde workflows veilig en stabiel blijven.

Gebruikersactiviteitsrapporten van Microsoft 365 (voorheen Office 365) zijn cruciaal om het servicegebruik te volgen, de productiviteit van klanten te waarborgen en beveiliging en compliance op peil te houden. Met PowerShell beschikt u over één aanpak om bruikbare inzichten te verzamelen uit Exchange Online, Teams, SharePoint en OneDrive.

Microsoft-gebruikersactiviteitsrapporten verzamelen met PowerShell

Microsoft Graph PowerShell biedt gegevens van hoge kwaliteit en sterke filtermogelijkheden. Met PowerShell combineert u gebruikersinventaris, gebruik en mailboxstatistieken in één centrale pipeline, ter ondersteuning van licentieoptimalisatie, het afdwingen van access governance en incidentonderzoeken.

Voor deze opzet hebt u het volgende nodig:

  • PowerShell 7 of hoger met de modules Microsoft Graph en Exchange Online geïnstalleerd.
  • Een Azure-app-registratie met Graph-scopes volgens het least-privilege-principe, zoals Group.Read.All en Reports.Read.All, inclusief toestemming.
  • Optioneel Exchange Online-machtigingen voor mailboxstatistieken.
  • Veilige opslag van referenties en een centraal uitvoerpad voor CSV en JSON.

Stap 1: gebruikers inventariseren met de Microsoft Graph PowerShell-module

Een volledige gebruikersinventaris vormt de basis voor het monitoren en beheren van Microsoft 365-klanten. Het script hieronder haalt alleen de meest relevante gebruikersgegevens op, wat de looptijd verkort en het proces ook op schaal efficiënt houdt.

Door in alle tenants hetzelfde CSV-exportformaat aan te houden, krijgt elk rapport dezelfde structuur. Daardoor zijn ze eenvoudig te vergelijken, samen te voegen en later te verrijken met gegevens uit bronnen zoals Microsoft Graph Reports of Exchange Online.

Voorbeeld van een PowerShell-script voor gebruikersinventaris

Install-Module Microsoft.Graph -Scope CurrentUser
Import-Module Microsoft.Graph
Connect-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

U kunt enkele eigenschappen in de regel Get-MGUser -All -Property weglaten om de reikwijdte van uw query te bepalen.

Stap 2: gebruiksstatistieken toevoegen met de Graph Reports API

Graph Reports geeft inzicht in de activiteit van gebruikers binnen diverse Microsoft 365-services. Zo komen slapende accounts en plekken met geconcentreerd gebruik aan het licht, waarmee u bepaalt waar u licenties kunt intrekken of upgraden.

Voorbeeldscripts voor de Graph Reports API in PowerShell

Het volgende script haalt de activiteit per gebruiker op binnen verschillende workloads over een opgegeven periode.

Get-MgReportOffice365ActiveUserDetail -Date (Get-Date).AddDays(-1) -OutFile "C:\Reports\ActiveUserDetail.csv"

Let op: het script hierboven vraagt de gegevens van gisteren op, aangeduid met .AddDays (-1). U kunt ook kiezen voor voortschrijdende periodes zoals hieronder:

# Last 7 days
Get-MgReportOffice365ActiveUserDetail -Period D7 -OutFile "C:\Reports\ActiveUserDetail_D7.csv"# Last 30 days
Get-MgReportOffice365ActiveUserDetail -Period D30 -OutFile "C:\Reports\ActiveUserDetail_D30.csv"

Daarna kunt u het gegenereerde CSV-bestand samenvoegen met uw bestaande inventarislijst uit stap 1 om per workload inactieve of weinig actieve accounts te herkennen:

$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

Stap 3: de gebruikersinventaris verrijken met mailboxstatistieken uit Exchange Online

Door mailboxstatistieken op te nemen in uw inventarislijst, herkent u te grote of snel groeiende mailboxen voordat ze de productiviteit van klanten raken. Bovendien zorgt dit ervoor dat klantaccounts en -beleidsregels goed worden onderhouden en helpt het beheerders om Exchange Online-mailboxen soepel te migreren.

Voorbeeld van een PowerShell-script om Exchange Online-statistieken op te vragen

Het volgende script verbindt u met de Exchange Online-service van Microsoft 365 en haalt per gebruiker de belangrijkste mailboxstatistieken op. Zo krijgen beheerders inzicht in het mailboxgebruik via kerngegevens als mailboxgrootte, aantal items, verwijderde items, laatste aanmeldingstijd en opslaglimieten.

Connect-ExchangeOnline -UserPrincipalName [email protected]
Get-MailboxStatistics -Identity [email protected]

Voer het script uit voor gebruikers die aan de volgende criteria voldoen:

  • Snelle mailboxgroei
  • Mailboxen met veel opslag of vlak bij hun quotum
  • VIP-, gedeelde of resourcemailboxen
  • Migratiekandidaten
  • Gebruikers met compliancegevoelige gegevens

Stap 4: Microsoft 365-gebruikersactiviteitsrapporten standaardiseren, exporteren en opslaan

Nadat u statistieken hebt opgehaald met Get-MgUser, Graph Reports en Exchange Online, sluiten die standaard niet op elkaar aan. Normalisatie levert gestandaardiseerde exports op met een consistent gegevensformaat, wat automatisering vereenvoudigt en herhaalbaarheid in alle tenants bevordert.

Aanbevolen actieplan:

  1. Normaliseer eigenschapsnamen en voeg berekende velden toe, zoals LicenseCount, IsEnabled en AsOf, zodat datasets netjes samenvallen.
  2. Exporteer CSV-bestanden voor operators en JSON voor dashboards en automatisering.
  3. Geef elk bestand een naam met de tenant-ID, het tijdvenster en de scriptversie voor een betere controleerbaarheid. Bijvoorbeeld:
    • users_{TenantId}_{Window}_{ScriptVersion}.csv
    • users_{TenantId}_{Window}_{ScriptVersion}.json

Stap 5: workflows automatiseren met veilige authenticatie en logging

Door standaardisatie en automatisering te combineren, kunt u workflows in alle tenants herhalen. Met veilige aanmeldingen draaien uw scripts soepel, onbeheerd en volgens schema.

Geautomatiseerde retry- en backoff-workflows houden taken stabiel, ook wanneer Microsoft 365 het aantal aanvragen beperkt. Gestructureerde logging laat op zijn beurt zien hoe effectief uw script is, doordat het vastlegt wat er is uitgevoerd en welke statistieken dat opleverde.

Aanbevolen actieplan:

  1. Gebruik app-only-authenticatie zodat onbeheerde scripts zonder onderbreking kunnen draaien.
  2. Voeg retry- en back-offconfiguraties toe om het verzamelen stabiel te houden ondanks API-throttling.
  3. Houd een gedetailleerd uitvoeringslogboek bij, met begin- en eindtijden, filters en aantallen records, zodat alles traceerbaar blijft tijdens audits of reviews.
  4. Plan frequente inventariscontroles en wekelijkse activiteitsupdates in zodat rapporten actueel blijven zonder onnodige kosten.
  5. Gebruik als MSP PowerShell-loops om alle klanten langs te gaan en per tenant een apart rapport te genereren.

Stap 6: Microsoft 365-gebruikersrapporten operationeel maken

Nadat u alle benodigde rapportagegegevens hebt verzameld, zet u met operationalisering ruwe statistieken om in bruikbare inzichten. Door exports te koppelen aan compliance, governance en servicereviews, krijgt u zicht op de activiteiten van uw klant.

Zo helpt u klanten om weloverwogen beslissingen te nemen en risico’s te beperken. Bovendien kunt u hen op die manier onderbouwde plannen voorleggen die meetbare serviceverbeteringen opleveren.

Aanbevolen actieplan:

  1. Voeg gebruikers- en activiteitsextracten toe aan compliancedossiers om aan te tonen dat u nauwkeurige toegangsregistraties bijhoudt en het gegevensgebruik monitort.
  2. Vergelijk rapporten met meldingen uit HR of de directory om inactieve gebruikers, verouderde toegang of verweesde licenties op te sporen.
  3. Laat hoogtepunten zien tijdens QBR’s om adoptietrends, gebruiksgroei of risicoreductie zichtbaar te maken.
  4. Archiveer rapporten om een feitelijke basislijn op te bouwen voor analyse na incidenten en snellere oplossingen.

Het verzamelen van Microsoft 365-gebruikersrapporten automatiseren

Handmatige stappen in verzamelworkflows vertragen de analyse door repetitief werk en verhogen bovendien de operationele kosten. Met automatisering maakt u van gegevensverzameling een consistent, gestandaardiseerd proces waarin menselijke fouten tot een minimum beperkt blijven.

Voorbeelden van aanknopingspunten voor automatisering:

  • Maak een nachtelijke scripttaak die gebruikersinventarissen exporteert met de Microsoft Graph PowerShell-module.
  • Plan wekelijkse scripts die gegevens over actieve gebruikers verzamelen en een gerichte taak die mailboxstatistieken ophaalt voor gemarkeerde gebruikers.
  • Automatiseer het maken van exports met tijdstempel en de daaropvolgende overdracht naar uw bewijsrepository.

NinjaOne-diensten voor het verzamelen van Microsoft 365-gebruikersactiviteitsrapporten

NinjaOne verbetert de manier waarop u gebruikersactiviteitsrapporten van Microsoft Office 365 verzamelt en beheert, met automatisering, beveiliging en schaalbaarheid.

  • Scripts op afstand uitrollen: voer Graph Report-, Exchange Online- en Microsoft Graph PowerShell-scripts direct, centraal en op schaal uit via remote scripting van NinjaOne
  • Geplande automatiseringen: met de functie voor geplande automatiseringen voert u verzamelscripts uit op vooraf bepaalde momenten, bijvoorbeeld bij het opstarten van het systeem of bij het aanmelden van een gebruiker.
  • Beveiligde aangepaste velden: sla gevoelige referenties op in beveiligde aangepaste velden en raadpleeg die informatie centraal via PowerShell-scripts.
  • Uitgebreide scriptmogelijkheden: maak aangepaste PowerShell-scripts om onder meer gebruikersinventarissen te automatiseren, inactieve gebruikers per workload te herkennen of kandidaten voor licentieoptimalisatie te genereren.

Daarnaast stroomlijnen de mogelijkheden van NinjaOne voor remote scripting en planning uw PowerShell-workflows, wat centrale en multi-tenant uitrol mogelijk maakt.

Het verzamelen van Microsoft 365-gebruikersrapporten optimaliseren met PowerShell

Nu de modules MSOnline en AzureAD zijn afgeschaft, biedt de overstap naar Microsoft Graph PowerShell een moderne, uniforme aanpak om gegevens te verzamelen uit alle Microsoft 365-services.

Door veilige automatisering, genormaliseerde exports en gestroomlijnde bewijsvoering te combineren, zetten teams ruwe statistieken om in bruikbaar operationeel inzicht dat audits ondersteunt, het licentiegebruik optimaliseert en incidentonderzoeken versnelt.

Gerelateerde onderwerpen:

FAQs

Get-MailboxStatistics geeft per gebruiker de mailboxgrootte, het aantal items, verwijderde items, de laatste aanmeldingstijd en de opslaglimieten terug. Met deze gegevens signaleert u snelle mailboxgroei, accounts vlak bij hun quotum en migratiekandidaten voordat ze een probleem worden.

Geef elke export een naam met de tenant-ID, het tijdvenster en de scriptversie. Bijvoorbeeld: users_{TenantId}_{Window}_{ScriptVersion}.csv. Zo blijven bestanden traceerbaar en controleerbaar wanneer u rapporten van veel klanten beheert.

Voeg gebruikers- en activiteitsextracten toe aan compliancedossiers om toegangsregistraties vast te leggen en laat in QBR’s adoptietrends of risicoreductie zien. Door die rapporten te archiveren, bouwt u bovendien een feitelijke basislijn op voor analyse na incidenten.

Om Microsoft 365-gebruikersrapporten te verzamelen, heeft uw Azure AD-app of beheerdersaccount Graph-machtigingen nodig, zoals Reports.Read.All, User.Read.All en Directory.Read.All. Voor mailboxstatistieken kunnen ook Exchange Online-rollen als View-Only Recipients of Mailbox Search vereist zijn.

Microsoft 365 beperkt API-aanvragen bij zware belasting en een script zonder retrylogica kan halverwege een run vastlopen. Met back-offconfiguraties blijven verzameltaken stabiel, ook wanneer aanvragen worden afgeknepen.

Dit vindt u misschien ook leuk

Klaar om de moeilijkste delen van IT te vereenvoudigen?

NinjaOne Algemene Voorwaarden

Door op de knop “Ik accepteer” hieronder te klikken, geeft u aan dat u de volgende wettelijke voorwaarden en onze Gebruiksvoorwaarden accepteert:

  • Eigendomsrechten: NinjaOne bezit en blijft eigenaar van alle rechten, aanspraken en belangen in en op het script (inclusief het auteursrecht). NinjaOne geeft u een beperkte licentie om het script te gebruiken in overeenstemming met deze wettelijke voorwaarden.
  • Gebruiksbeperking: U mag het script alleen gebruiken voor uw legitieme persoonlijke of interne bedrijfsdoeleinden en u mag het script niet delen met derden.
  • Republicatieverbod: Het is onder geen beding toegestaan om het script opnieuw te publiceren in een scriptbibliotheek die toebehoort aan of onder controle staat van een andere softwareleverancier.
  • Garantie disclaimer: Het script wordt geleverd “zoals het is” en “zoals het beschikbaar is”, zonder enige vorm van garantie. NinjaOne belooft of garandeert niet dat het script vrij van gebreken zal zijn of dat het aan uw specifieke behoeften of verwachtingen zal voldoen.
  • Risicoaanvaarding: Het gebruik van het script is op eigen risico. U erkent dat het gebruik van het script bepaalde inherente risico’s met zich meebrengt en u begrijpt en aanvaardt elk van deze risico’s.
  • Verklaring van afstand en vrijwaring: U zult NinjaOne niet verantwoordelijk houden voor enige nadelige of onbedoelde gevolgen die voortvloeien uit uw gebruik van het script en u doet afstand van alle wettelijke of billijke rechten of rechtsmiddelen die u tegen NinjaOne kunt hebben met betrekking tot uw gebruik van het script.
  • EULA: Als u een NinjaOne-klant bent, is uw gebruik van het script onderworpen aan de licentieovereenkomst voor eindgebruikers die op u van toepassing is (EULA).