/
/

Microsoft Teams auditen: kanalen controleren via PowerShell

door Team Ninja
How to Audit Microsoft Teams Channels Via 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 volledige inventaris van teams en kanalen op met native PowerShell-cmdlets voor nauwkeurig, actueel inzicht.
  • Haal de aanmaak- en wijzigingshistorie van kanalen uit de auditlogboeken van Microsoft Purview als compliancebewijs.
  • Analyseer het opslaggebruik via de Graph API om datahotspots en groeipatronen op te sporen.
  • Correleer inventaris-, audit- en opslaggegevens om risicovolle situaties te markeren, zoals grote inactieve kanalen.
  • Houd geautomatiseerde planning en bewijsbewaring in stand om doorlopende compliance monitoring aan te tonen.
  • Maak bevindingen operationeel door problemen naar herstelworkflows te sturen en governancerapporten te genereren.

Ongecontroleerde groei van Microsoft Teams kan leiden tot beveiligingslekken en complianceproblemen wanneer kanalen zich vermenigvuldigen zonder goed toezicht. Een systematische Teams-audit met de native PowerShell-tools brengt deze verborgen risico’s aan het licht en stemt uw samenwerkingsomgeving af op het bewaarbeleid.

In deze handleiding bouwt u stap voor stap een herhaalbaar auditproces op dat kanaalinventarisatie, activiteitenlogboeken en opslaganalyse combineert voor doorlopende governance.

Start automatische herstelworkflows zodra configuratierisico’s worden gemarkeerd.

Ontdek de mogelijkheden van NinjaOne IT Automation

Microsoft Teams auditen met PowerShell: stap voor stap

Regelmatige PowerShell-audits geven u essentieel inzicht in uw Teams-omgeving op het gebied van beveiliging en beheer.

📌Use case: voer audits uit tijdens compliancebeoordelingen, na beveiligingsincidenten, vóór migraties of wanneer u wildgroei van kanalen aanpakt. Dit is vooral waardevol voor MSP’s die meerdere klanttenants beheren.

📌Vereisten: zorg dat u het volgende hebt voordat u verdergaat:

  • De PowerShell-module van Microsoft Teams met beheerdersrechten
  • Toegang tot de auditlogboeken van Microsoft Purview
  • PowerShell 7 op Windows 11 en veilige opslag voor exports
  • Optioneel: Graph-machtigingen voor opslagrapportage

Zodra u dit klaar hebt, volgt u de onderstaande stappen.

Stap 1: teams en kanalen inventariseren

Begin uw Microsoft Teams-audit met een volledige inventarisatie van alle teams en kanalen.

  1. Maak verbinding met Teams PowerShell en exporteer alle teams:

Connect-MicrosoftTeams
Get-Team | Select-Object DisplayName, GroupId, Visibility | Export-CSV "C:\TeamsAudit\AllTeams.csv" -NoTypeInformation

    • Deze opdracht maakt verbinding met de Teams-omgeving en haalt alle essentiële gegevens op, zoals teamnaam, unieke ID en privacy-instellingen, naar een CSV-bestand. Vergeet niet het voorbeeldbestandspad C:\TeamsAudit\AllTeams.csv te vervangen door uw eigen pad
  1. Maak een lijst van alle kanalen en classificeer de typen (bijvoorbeeld standaard, privé, gedeeld):

$AllTeams = Get-Team
foreach ($Team in $AllTeams) {
Get-TeamChannel -GroupId $Team.GroupId | Select-Object TeamName, DisplayName, MembershipType, Description | Export-CSV "C:\TeamsAudit\AllChannels.csv" -Append -NoTypeInformation
}

  1. Leg bij privékanalen de eigenaren vast om verweesde kanalen te vinden met Get-TeamChannelUser.

Deze methode gebruikt native PowerShell-cmdlets voor nauwkeurige, actuele gegevens over uw Teams-omgeving. Daarna hebt u een basis voor opslaganalyse en het volgen van activiteiten.

Stap 2: kanaalactiviteiten ophalen uit de auditlogboeken van Microsoft Purview

Auditlogboeken leveren cruciaal bewijs van wie Teams-kanalen heeft aangemaakt, gewijzigd of verwijderd en wanneer dat gebeurde.

  1. Maak verbinding met Exchange Online en zoek naar activiteiten in Teams-kanalen:
    1. Installeer de module als deze nog niet is geïnstalleerd:

Install-Module ExchangeOnlineManagement -Scope CurrentUser -Force

    1. Maak verbinding met Microsoft Purview (Compliance) PowerShell:

Connect-IPPSSession

    1. Haal de auditgebeurtenissen van Teams-kanalen van de afgelopen 30 dagen op:

$StartDate = (Get-Date).AddDays(-30)
$EndDate = Get-Date

$AuditResults = Search-UnifiedAuditLog `
-StartDate $StartDate `
-EndDate $EndDate `
-RecordType MicrosoftTeams `
-Operations ChannelCreated,ChannelUpdated,ChannelDeleted `
-ResultSize 5000

    1. Exporteer de resultaten voor de analyse:

$AuditResults |
Select-Object CreationDate, UserIds, Operations, AuditData |
Export-Csv "C:\TeamsAudit\ChannelActivities.csv" -NoTypeInformation

Write-Host "Audit export complete. File saved to "C:\TeamsAudit\ChannelActivities.csv"

  1. Exporteer de relevante auditgegevens voor analyse:

$AuditResults | Select-Object CreationDate, UserIds, Operations, AuditData | Export-CSV "C:\TeamsAudit\ChannelActivities.csv" -NoTypeInformation

  1. Leg uw zoekparameters, tijdsbereik en aantallen resultaten vast als compliancebewijs.

Deze methode werkt door een query uit te voeren op het unified audit log van Microsoft, dat automatisch alle lifecycle-gebeurtenissen van kanalen in uw tenant registreert. Gebruik deze aanpak wanneer u specifieke incidenten onderzoekt of compliance met uw databeleid moet aantonen.

Na de extractie hebt u een chronologisch overzicht van alle kanaalwijzigingen, klaar om te koppelen aan uw teaminventaris voor een volledige audittrail.

Stap 3: opslagcontext toevoegen met de Graph API

Inzicht in het opslaggebruik maakt uw Teams-audit compleet, omdat het datahotspots en groeipatronen zichtbaar maakt.

  1. Maak een app-registratie in Microsoft Entra ID, voeg de toepassingsmachtiging Microsoft Graph Sites.Read.All toe en verleen beheerderstoestemming.
  2. Maak verbinding met Microsoft Graph en haal de opslaggegevens op:
    • Installeer de Microsoft Graph-module als deze ontbreekt:

if (-not (Get-Module -ListAvailable -Name Microsoft.Graph)) {
Install-Module Microsoft.Graph -Scope CurrentUser -Force
}

    • Maak verbinding met Microsoft Graph (alleen app, certificaat):

Connect-MgGraph -ClientId "your-client-id" -TenantId "your-tenant-id" -CertificateThumbprint "your-cert-thumbprint" | Out-Null

    • Haal alle Microsoft 365-groepen met Teams ingeschakeld op:

$teams = Get-MgGroup -All | Where-Object { $_.ResourceProvisioningOptions -contains "Team" }
$results = New-Object System.Collections.Generic.List[object]
foreach ($team in $teams) {
try {
$drive = Get-MgGroupDrive -GroupId $team.Id
$site = Get-MgGroupSite -GroupId $team.Id | Select-Object -First 1
$usedPercent = if ($drive?.Quota?.Total) { [math]::Round(($drive.Quota.Used / $drive.Quota.Total) * 100, 2) } else { $null }
$results.Add([PSCustomObject]@{
TeamName = $team.DisplayName
SiteUrl = $site?.WebUrl
TotalBytes = $drive?.Quota?.Total
UsedBytes = $drive?.Quota?.Used
UsedPercent = $usedPercent
State = $drive?.Quota?.State
})
}
catch {
$results.Add([PSCustomObject]@{
TeamName = $team.DisplayName
SiteUrl = $null
TotalBytes = $null
UsedBytes = $null
UsedPercent = $null
State = "error: $($_.Exception.Message)"
})
}
}
$exportFolder = "C:\TeamsAudit"
if (-not (Test-Path $exportFolder)) { New-Item -Path $exportFolder -ItemType Directory | Out-Null }
$csvPath = Join-Path $exportFolder "TeamStorage.csv"
$results | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
Write-Host "Storage metrics export complete: $csvPath"

  1. Exporteer de opslaggegevens van kanalen, inclusief SharePoint-URL’s en gebruiksstatistieken, om snelle groei of conflicten met het bewaarbeleid op te sporen.

Deze methode werkt door een query uit te voeren op de onderliggende SharePoint-opslag achter elk Teams-kanaal. Zo krijgt u nauwkeurige omvanggegevens, ook als kanalen zijn hernoemd. Gebruik deze aanpak wanneer u opslagkosten onderzoekt, migraties plant of archieven identificeert.

Door opslaggegevens te combineren met uw auditgebeurtenissen, krijgt u een krachtig prioriteringssysteem voor kanalen die beoordeling verdienen. Daarmee is uw rapportage over Teams-kanalen compleet.

Stap 4: gegevens correleren en problemen markeren

Door uw auditresultaten te correleren, verandert ruwe data in bruikbare inzichten voor het beheer van Teams-kanalen.

  1. Combineer uw inventaris, auditgebeurtenissen en opslaggegevens met Team ID en kanaalnamen als primaire sleutels.
  2. Markeer risicovolle situaties met PowerShell-filters:
    1. Zoek inactieve kanalen met veel opslag:

$InactiveLargeChannels = $ChannelData | Where-Object {
$_.LastActivity -lt (Get-Date).AddDays(-90) -and $_.StorageUsed -gt 1GB
}

      • Dit script vindt kanalen die de afgelopen 90 dagen inactief waren en toch meer dan 1 GB aan opslag gebruiken.
    1. Spoor kanalen op waar vaak wordt aangemaakt of verwijderd:

$VolatileChannels = $AuditResults | Group-Object ChannelId | Where-Object Count -gt 10

      • Deze code groepeert auditgebeurtenissen per kanaal en markeert kanalen met meer dan 10 geregistreerde gebeurtenissen. Zo vallen kanalen met ongewoon veel wijzigingen direct op.
  1. Wijs voor elk gemarkeerd probleem een verantwoordelijke en een deadline toe.

Deze correlatie werkt door meerdere gegevensbronnen met elkaar te vergelijken, waardoor patronen zichtbaar worden die een eendimensionale analyse zou missen. Gebruik deze aanpak bij de voorbereiding op compliance-audits of bij het invoeren van proactieve governance.

Na de correlatie hebt u een geprioriteerde lijst met kanaalproblemen en duidelijke verantwoordelijkheden. Dat maakt systematisch herstel mogelijk en houdt uw Microsoft Teams-audits doorlopend compliant.

Stap 5: bewijs exporteren, inplannen en bewaren

Goede documentatie maakt van uw audit een doorlopende compliancestrategie in plaats van een eenmalige controle.

  1. Exporteer gestandaardiseerde rapporten met de tenantcontext, auditdatum en bevindingen:

$ExportData = [PSCustomObject]@{
Tenant = "Contoso"
AuditDate = Get-Date -Format "yyyy-MM-dd"
TeamsCount = $AllTeams.Count
ChannelsCount = $AllChannels.Count
IssuesFlagged = $FlaggedIssues.Count
}
$ExportData | Export-CSV "C:\TeamsAudit\AuditSummary_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation

    • Deze code maakt een auditsamenvatting van één regel (tenantnaam, auditdatum, aantal teams, aantal kanalen en aantal gemarkeerde problemen) en slaat die op in het bestand C:\TeamsAudit\AuditSummary_YYYYMMDD.csv.
  1. Houd uitvoeringslogboeken bij met de looptijd, aantallen records en fouten.
  2. Plan automatische runs via Taakplanner van Windows of uw RMM-tool:
    • Wekelijkse inventarisscans
    • Maandelijkse uitgebreide auditruns
    • Minimaal 12 maanden bewaartermijn voor alle artefacten

Deze systematische aanpak levert bewijs met tijdstempel en versiebeheer, waarmee u doorlopende compliance monitoring aantoont. Gebruik deze methode bij de voorbereiding op wettelijke audits of bij het opzetten van governance voor de lange termijn.

Na de implementatie beschikt u over een verifieerbare audittrail die aan de compliance-eisen voldoet en tegelijk historische gegevens levert voor trendanalyse en capaciteitsplanning.

Stap 6: aan de slag met de auditresultaten

Door auditbevindingen om te zetten in concrete workflows, levert uw beheer van Microsoft Teams-kanalen echte bedrijfswaarde op.

  1. Stuur gemarkeerde items door naar de juiste teams:
    • Wildgroei van kanalen > opschoonworkflow
    • Hiaten in het bewaarbeleid > team voor beleidsevaluatie
    • Grote inactieve kanalen > archiveringsproces
  2. Zet een proces op voor het aanmaken van tickets voor kanalen zonder eigenaar, zodat kritieke problemen zichtbaar worden.
  3. Documenteer oplossingen en uitzonderingen in maandelijkse governancerapporten voor het management.

In deze operationele fase koppelt u de auditbevindingen aan bestaande IT-workflows, zodat problemen niet alleen worden gesignaleerd maar ook worden toegewezen en gevolgd. Gebruik deze aanpak wanneer u doorlopende governance opzet of compliance aan stakeholders wilt aantonen.

Na de implementatie sluit u de auditcyclus af met gedocumenteerde oplossingen en zet u ruwe data om in meetbare verbeteringen in het beheer van uw Teams-omgeving.

Ontdek hoe NinjaOne RMM het inplannen van scripts en de monitoring van endpoints over alle tenants centraliseert.

Bekijk een gratis demo van NinjaOne RMM

Geautomatiseerde MS Teams-audits operationeel maken met NinjaOne

NinjaOne maakt van uw PowerShell-auditworkflow een geautomatiseerde oplossing die klaar is voor enterprise-gebruik.

  1. Gebruik auditscripts en plan ze in via de NinjaOne Automation Library.
  2. Sla referenties veilig op met het referentiebeheer van NinjaOne voor toegang via serviceaccounts.
  3. Configureer automatische tickettriggers voor:
    • Kanalen zonder eigenaar die moeten worden toegewezen
    • Grote inactieve kanalen die gearchiveerd moeten worden
    • Frequente configuratiewijzigingen die op instabiliteit wijzen

Deze integratie werkt doordat NinjaOne scripts naar endpoints kan sturen en referenties veilig kan opslaan. Zo is handmatig ingrijpen niet meer nodig en blijft de audittrail intact. Gebruik deze aanpak wanneer u Teams-beheer opschaalt over meerdere klanten of rapportage op directieniveau nodig hebt.

Quick-start guide

NinjaOne kan Microsoft Teams-kanalen auditen via PowerShell. Zo doet u dat:

  1. Installeer de benodigde modules:

Zorg dat de PowerShell-modules MicrosoftTeams en ExchangeOnlineManagement zijn geïnstalleerd.

  1. Maak verbinding met Microsoft 365:

powershell

Connect-MicrosoftTeams

  1. Exporteer teams en kanalen

Voer het volgende PowerShell-script uit om de gegevens van teams en kanalen naar CSV-bestanden te exporteren.

```powershell

$Folder = "C:\TeamsAudit"

New-Item -Path $Folder -ItemType Directory -Force | Out-Null

$Teams = Get-Team

$Teams |

Select-Object DisplayName, GroupId, Visibility |

Export-Csv "$Folder\AllTeams.csv" -NoTypeInformation

$Channels = foreach ($Team in $Teams) {

try {

Get-TeamChannel -GroupId $Team.GroupId -ErrorAction Stop |

Select-Object @{

Name = "TeamName"

Expression = { $Team.DisplayName }

}, @{

Name = "TeamId"

Expression = { $Team.GroupId }

}, DisplayName, MembershipType, Description

}

catch {

Write-Warning "Could not retrieve channels for '$($Team.DisplayName)': $($_.Exception.Message)"

}

}

$Channels |

Export-Csv "$Folder\AllChannels.csv" -NoTypeInformation

Write-Host "Export complete. Files saved to $Folder"

```

Het script exporteert teamnamen, ID’s en zichtbaarheidsinstellingen naar `AllTeams.csv`. Kanaalnamen, bijbehorende teamnamen en ID’s, lidmaatschapstypen en beschrijvingen gaan naar `AllChannels.csv`.

Doorlopende compliance met geautomatiseerde Microsoft Teams-audits

Een complete Teams-audit combineert kanaalinventarisatie, activiteitenlogboeken uit Purview en opslaganalytics en verandert chaotische wildgroei in beheerde samenwerking.

Door dit proces te automatiseren met PowerShell en regelmatige runs in te plannen, houdt u doorlopend zicht op uw omgeving en pakt u beveiligingsrisico’s en compliance-eisen proactief aan.

Met deze gedisciplineerde aanpak blijft uw Teams-omgeving op de lange termijn geoptimaliseerd voor zowel productiviteit als governance.

Gerelateerde onderwerpen:

FAQs

Gebruik voor terugkerende of geautomatiseerde audits certificaatgebaseerde authenticatie met een app-registratie in Microsoft Entra ID in plaats van interactief inloggen. Zo maakt u veilige, niet-interactieve verbindingen met Microsoft Teams, Exchange Online en Microsoft Graph zonder gebruikersnamen of wachtwoorden in scripts op te nemen.

Als een kanaal wordt hernoemd, blijft de naam van de onderliggende SharePoint-map ongewijzigd. Daarom is opslagrapportage via de Graph API essentieel om actuele kanaalnamen nauwkeurig te koppelen aan hun werkelijke opslaglocaties.

Voor het monitoren van gasten in Teams audit u de lidmaatschapsgerelateerde bewerkingen in het Unified Audit Log (zoals MemberAdded en MemberRemoved) en filtert u expliciet op gebeurtenissen waarbij de betrokken gebruiker een gast of een extern account is. Zo krijgt u inzicht in wijzigingen in gasttoegang en mogelijke beveiligingsrisico’s.

Gebruik voor grote Teams-omgevingen die de limiet van 5.000 records overschrijden een zoeksessie met Search-UnifiedAuditLog door een SessionId en de parameter -SessionCommand ReturnLargeSet op te geven. Zo haalt u de resultaten in meerdere batches op via herhaalde query’s, zonder records te verliezen of tegen de limiet aan te lopen.

Geëxporteerde auditartefacten (CSV/JSON) bewaart u het best onder een vastgelegd bewaarbeleid (bijvoorbeeld 12 maanden of langer), los van de bewaartermijn van de auditlogboeken in Microsoft Purview, die kan variëren per licentie en configuratie.

Ja, gebruik de cmdlets Get-CsTeamsMeetingPolicy en Get-CsTeamsCallingPolicy om vergaderinstellingen, opnamebeleid en belfuncties binnen uw organisatie te auditen.

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).