Automating Microsoft Teams Channel Membership Audit with PowerShell

4 min. readlast update: 10.13.2024

Microsoft Teams has become a key tool for collaboration within organizations, and as its usage grows, managing and auditing channel memberships can become a complex task. The PowerShell script discussed in this article automates the process of retrieving all channels and their respective members across every team in a Microsoft 365 tenant. This script is valuable for IT administrators who want to audit or export channel membership details for reporting or management purposes.

Script Overview

This script performs the following actions:

  1. Connects to Microsoft Teams using PowerShell.
  2. Retrieves all teams and channels within the tenant.
  3. Extracts the membership information for each channel, along with the channel and team details.
  4. Stores the membership data in a collection for further use, such as exporting to a CSV file or generating reports.

Requirements:

Before running the script, ensure you have:

  • The Microsoft Teams PowerShell Module installed.
  • Admin permissions to retrieve team and channel data.

PowerShell Script Breakdown

1. Connecting to Microsoft Teams

The script starts by connecting to Microsoft Teams with administrative permissions using the Connect-MicrosoftTeams cmdlet.

 
Connect-MicrosoftTeams

This establishes the necessary authentication, allowing the script to interact with the Teams environment and retrieve team and channel information.

2. Retrieving Teams and Channels

The script uses the Get-Team cmdlet to retrieve all teams within the tenant. It loops through each team and retrieves the channels within that team using the Get-TeamChannel cmdlet.

 
$teams = Get-Team $Channels = @() $Users = @() Foreach ($team in $teams) { Write-Verbose "Retrieving $($team.DisplayName) Channels & Members..." $Channels = Get-TeamChannel -GroupId $team.GroupId

This part of the script builds the list of channels for each team, ensuring that all relevant data is gathered.

3. Retrieving Channel Members

For each channel, the script retrieves the list of members using the Get-TeamChannelUser cmdlet. It then enhances the member data by adding additional properties, such as the channel name, team name, channel ID, and team ID.

 
foreach ($channel in $Channels){ $members = Get-TeamChannelUser -GroupId $($team.GroupId) -DisplayName $($channel.DisplayName) foreach ($member in $members){ $member | Add-Member -MemberType NoteProperty -Name "Channel Name" -Value $($channel.DisplayName) $member | Add-Member -MemberType NoteProperty -Name "ChannelId" -Value $($channel.Id) $member | Add-Member -MemberType NoteProperty -Name "Team Name" -Value $($team.DisplayName) $member | Add-Member -MemberType NoteProperty -Name "TeamId" -Value $($team.GroupId) $Users += $member } }

By using Add-Member, the script appends details about the channel and team to each member record. This makes the data more comprehensive and useful for reporting or further manipulation.

4. Outputting the Results

The script stores all the user membership data in the $Users array. This data can then be output to the console or used for further processing, such as exporting to a CSV file for audits or reporting.

$Users

Example Use Cases:

  • Audit Channel Memberships: This script can be used to generate a comprehensive audit of all channel memberships across Microsoft Teams. By running the script periodically, administrators can ensure that team memberships remain compliant with internal policies.

  • Exporting Data: The $Users array can be exported to a CSV file for further analysis using the following command:

     
    $Users | Export-Csv -Path "C:\path\to\output\teams_channel_members.csv" -NoTypeInformation

    This would provide a complete snapshot of which users belong to which channels in which teams.

Best Practices for Running the Script:

  • Run with Administrative Privileges: Ensure the user running the script has the necessary permissions to access team and channel data.
  • Test Before Full Deployment: As with any script that interacts with production environments, test it in a smaller environment first to ensure it functions as expected.
  • Schedule Regular Audits: Use this script to run regular audits on Teams channel memberships. Automating this process ensures that changes in membership are tracked over time.

Why Automate Team Membership Audits?

As teams grow and evolve, managing channel memberships manually becomes increasingly difficult. This script provides an efficient way to automate the collection of membership data across all teams and channels, ensuring that IT administrators have a clear view of who has access to what within the organization. Automated auditing also helps maintain security and compliance, as it allows for the identification of unauthorized access or incorrect memberships.

Conclusion

This PowerShell script offers a streamlined way to audit Microsoft Teams channel memberships, gathering and organizing membership information across all teams and channels within a tenant. By automating the retrieval of this data, IT administrators can save time and ensure that they maintain an accurate and up-to-date record of team and channel memberships.

Whether you're conducting a security audit, generating reports, or simply ensuring that team memberships are accurate, this script provides a powerful solution for managing Teams at scale. By integrating it with reporting tools or scheduling it to run periodically, you can maintain tight control over your Teams environment and ensure compliance with your organization's policies.

Was this article helpful?