PowerShell Script: What are my Teams With Shared Channels

If you are trying to find a list of all your teams with shared channels then this PowerShell script is just what you need.

The script’s purpose is to find all teams with shared channels. The script gets all the teams, and it checks all channels for each team. It will output the team and any of the shared channels it has. By default, the script outputs the result only to the screen. There are optional flags you can use to export the result to CSV.  

-ExportCSV (if set, this will automatically export the result to a CSV file. If you don’t set an export path, it will export the file to %temp% folder)  

Example: Get-TeamsWithSharedChannels.ps1 -ExportCSV  


Example: Get-TeamsWithSharedChannels.ps1 -ExportCSV -ExportFilePath “C:\Temp\report.csv”   

PowerShell Script code:

# Set script parameters
param (
    [string]$ExportFilePath = "$env:TEMP\$(Get-Date -Format "yyyy_MM_dd")TeamsWithSharedChannels.csv"

# Check or install Microsoft Teams module
if ($null -eq (Get-Module -ListAvailable MicrosoftTeams)) {
    try {
        Write-Output "Microsoft Teams module not found. Trying to install"
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
        Install-PackageProvider -Name NuGet -MinimumVersion -Force | Out-Null
        Install-Module MicrosoftTeams -Force | Out-Null
        Write-Output "Microsoft Teams module installed"
    catch {
        Write-Output "Unable to install Microsoft Teams module. $($Error[0].Exception.Message)"

# Connect to Microsoft Teams
try {
    Write-Output "Connecting to Microsoft Teams"
    Connect-MicrosoftTeams | Out-Null
catch {
    Write-Output "Unable to connect to Microsoft Teams. $($Error[0].Exception.Message)"

# Get all teams
$AllTeams = Get-Team

# Create empty report object
$FinalReport = @()

# Check channels of each team
ForEach ($SingleTeam in $AllTeams) {
    # Get all shared channels
    try {
        $AllChannels = $null
        $AllChannels = Get-TeamChannel -GroupId $SingleTeam.GroupId -MembershipType Shared
        if ($AllChannels) {
            ForEach ($SingleChannel in $AllChannels) {
                $TeamObject = [PSCustomObject]@{
                    Team           = $SingleTeam.DisplayName
                    Channel        = $SingleChannel.DisplayName
                    MembershipType = $SingleChannel.MembershipType
                $FinalReport += $TeamObject
    catch {
        Write-Output "Failed to get shared channels of $($SingleTeam.DisplayName) team. $($Error[0].Exception.Message)"
        $TeamObject = [PSCustomObject]@{
            Team  = $SingleTeam.DisplayName
            Error = "Failed to get channels of the team. $($Error[0].Exception.Message)"
        $FinalReport += $TeamObject

# Print result to the screen
Write-Output $FinalReport | Sort-Object User | Format-Table

# Export result to CSV file if needed
if ($ExportCSV) {
    $FinalReport | Sort-Object User | Export-Csv -Path $ExportFilePath -NoTypeInformation
    Write-Output "Report saved to $ExportFilePath"

# Stop before closing powershell window
Read-Host "Script completed. Press 'Enter' to finish"


Get a list of teams with shared channels quickly with SysKit Point

SysKit Point a Microsoft 365 governance and management platform, can get you a list of teams with shared channels quickly.

SysKit Point can generate various reports in real time. You can easily access them online and share them with your colleagues or managers with a simple link.

Additionally, you can schedule reports, export them in excel or PDF, and perform management actions directly from a report. Easily check Project Server sites, security and database information, operational policies, time and task management settings, the projects list, and project permissions.

Subscribe to the SysKit Blog

Get more product guides, webinar transcripts, and news from the Office 365 and SharePoint world!