List of Teams Channel Members

Copper Contributor

Hello all, 
do you guys know how to download list of all of the members (emails) of teams channel? 

Could you please help me and explain in details? I have something about 1000 members of the channel and would like to send an outlook invitation to all of them.

1 Reply

Hello@WICHEREGG10

welcome to the Microsoft community, My name is Recep and I'll be happy to help you today,
I understand that you to download list of all of the members in a teams channels

To perform a bulk export of Teams and Members:

  1. On the Home page, click Tools, and then click Access Control.
  2. Click the Manage Teams tab.
  3. Select a team.
  4. Click the Export File icon 

     

    1. . The teams listed on the Manage Teams page are exported to a teams.csv file, by default
    2. Click Save to save the teams.csv file. The file provides a listing of all teams and the members for each team.


      However, if that does not work, kindly use the PowerShell below 

      First install and connect:

      Install-Module PowerShellGet -RequiredVersion 2.2.4.1
      Install-Module -Name MicrosoftTeams -RequiredVersion 3.0.0
      Connect-MicrosoftTeams

      Then:
      1. Copy the ps1 file to your downloads folder
      2. cd C:\Users\username\Downloads
      3. .\TeamsChannelMemberReport.ps1

      Choose option 2 to export all and it will export to downloads.

      Save this as TeamsChannelMemberReport.ps1:

      <#
      .Requires -version 2 - Connect-MicrosoftTeams and then Run the script in Powershell
      Updated on 28 Feb 2021
      .SYNOPSIS
      .\TeamsChannelMemberReport.ps1 - It Can Display all the Teams and its Channels and its members on a List
      Or It can Export to a CSV file
      With Export of Specific teams
      Example 1
      PS C:\Scripts> .\TeamsChannelMemberReportv1.0.ps1
      Teams Channel Member Report
      ----------------------------
      1.Display in Microsoft Teams Shell
      2.Export to CSV File
      3.Display Specific Microsoft Team in Shell
      4.Export Specific Microsoft Team to CSV File
      Choose The Task: 1
      User SMTP Address Role Channel DisplayName Team DisplayName
      ----------------- ---- ------------------- ----------------
      Email address removed Owner General Teams_Azure365pro
      Email address removed Member General Teams_Azure365pro
      Email address removed Member General Teams_Azure365pro
      Email address removed Owner General Teams_Azure365pro
      Email address removed Member General Teams_Azure365pro
      Email address removed Member General Teams_Azure365pro
      Email address removed Owner General InformationTec...
      Email address removed Member General InformationTec...
      Email address removed Owner ServiceDesk Team InformationTec...
      Email address removed Owner Infrastructure Team InformationTec...
      Example 2
      PS C:\Scripts> .\TeamsChannelMemberReportv1.0.ps1
      Teams Channel Member Report
      ----------------------------
      1.Display in Microsoft Teams Shell
      2.Export to CSV File
      3.Display Specific Microsoft Team in Shell
      4.Export Specific Microsoft Team to CSV File
      Choose The Task: 2
      Enter the Path of CSV file (Eg. C:\Teams.csv): c:\teams.csv
      .Author
      Written By: Satheshwaran Manoharan
      Change Log
      V1.0, 13/05/2020 - Initial version
      #>

      Write-host "
      Teams Channel Member Report
      ----------------------------
      1.Display in Microsoft Teams Shell
      2.Export to CSV File
      3.Display Specific Microsoft Team in Shell
      4.Export Specific Microsoft Team to CSV File"-ForeGround "Cyan"

      #----------------
      # Script
      #----------------

      Write-Host " "

      $number = Read-Host "Choose The Task"
      $output = @()
      switch ($number)
      {

      1 {
      $i = 0
      $AllTeams = Get-Team
      Foreach ($Team in $AllTeams)
      {
      $AllChannels = Get-TeamChannel -GroupID $Team.GroupID
      Foreach ($Channel in $AllChannels)
      {
      $AllMembers = Get-TeamChannelUser -GroupId $Team.GroupID -DisplayName $channel.DisplayName
      Foreach ($member in $AllMembers)
      {
      $userObj = New-Object PSObject
      $userObj | Add-Member NoteProperty -Name "User SMTP Address" -Value $member.User
      $userObj | Add-Member NoteProperty -Name "Role" -Value $member.role
      $userObj | Add-Member NoteProperty -Name "Channel DisplayName" -Value $Channel.DisplayName
      $userObj | Add-Member NoteProperty -Name "Team DisplayName" -Value $Team.DisplayName

      $output += $UserObj

      }
      }
      # update counters and write progress
      $i++
      Write-Progress -activity "Scanning Teams . . .Channels . . . Members" -status "Scanned: $i of $($AllTeams.Count)" -percentComplete (($i / $AllTeams.Count) * 100)
      Write-Output $Output
      }
      ;Break}

      2 {
      $i = 0
      $CSVfile = Read-Host "Enter the Path of CSV file (Eg. C:\Teams.csv)"
      $AllTeams = Get-Team
      Foreach ($Team in $AllTeams)
      {
      $AllChannels = Get-TeamChannel -GroupID $Team.GroupID
      Foreach ($Channel in $AllChannels)
      {
      $AllMembers = Get-TeamChannelUser -GroupId $Team.GroupID -DisplayName $channel.DisplayName
      Foreach ($member in $AllMembers)
      {
      $userObj = New-Object PSObject
      $userObj | Add-Member NoteProperty -Name "DisplayName" -Value $member.Name
      $userObj | Add-Member NoteProperty -Name "UserId" -Value $member.UserId
      $userObj | Add-Member NoteProperty -Name "User SMTP Address" -Value $member.User
      $userObj | Add-Member NoteProperty -Name "Role" -Value $member.role
      $userObj | Add-Member NoteProperty -Name "Channel DisplayName" -Value $Channel.DisplayName
      $userObj | Add-Member NoteProperty -Name "Channel Description" -Value $Channel.Description
      $userObj | Add-Member NoteProperty -Name "Channel MembershipType" -Value $Channel.MembershipType
      $userObj | Add-Member NoteProperty -Name "Team GroupID" -Value $Team.GroupId
      $userObj | Add-Member NoteProperty -Name "Team DisplayName" -Value $Team.DisplayName
      $userObj | Add-Member NoteProperty -Name "Team Description" -Value $Team.Description
      $userObj | Add-Member NoteProperty -Name "Team Visibility" -Value $Team.Visibility
      $userObj | Add-Member NoteProperty -Name "Team MailNickName" -Value $Team.MailNickName
      $userObj | Add-Member NoteProperty -Name "Team Classification" -Value $Team.Classification
      $userObj | Add-Member NoteProperty -Name "Team Archived" -Value $Team.Archived
      $userObj | Add-Member NoteProperty -Name "Team AllowGiphy" -Value $Team.AllowGiphy
      $userObj | Add-Member NoteProperty -Name "Team GiphyContentRating" -Value $Team.GiphyContentRating
      $userObj | Add-Member NoteProperty -Name "Team AllowStickersAndMemes" -Value $Team.AllowStickersAndMemes
      $userObj | Add-Member NoteProperty -Name "Team AllowGuestCreateUpdateChannels" -Value $Team.AllowGuestCreateUpdateChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowGuestDeleteChannels" -Value $Team.AllowGuestDeleteChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowCreateUpdateChannels" -Value $Team.AllowCreateUpdateChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowCreatePrivateChannels" -Value $Team.AllowCreatePrivateChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowDeleteChannels" -Value $Team.AllowDeleteChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowAddRemoveApps" -Value $Team.AllowAddRemoveApps
      $userObj | Add-Member NoteProperty -Name "Team AllowCreateUpdateRemoveTabs" -Value $Team.AllowCreateUpdateRemoveTabs
      $userObj | Add-Member NoteProperty -Name "Team AllowCreateUpdateRemoveConnectors" -Value $Team.AllowCreateUpdateRemoveConnectors
      $userObj | Add-Member NoteProperty -Name "Team AllowUserEditMessages" -Value $Team.AllowUserEditMessages
      $userObj | Add-Member NoteProperty -Name "Team AllowUserDeleteMessages " -Value $Team.AllowUserDeleteMessages
      $userObj | Add-Member NoteProperty -Name "Team AllowOwnerDeleteMessages" -Value $Team.AllowOwnerDeleteMessages
      $userObj | Add-Member NoteProperty -Name "Team AllowTeamMentions" -Value $Team.AllowTeamMentions
      $userObj | Add-Member NoteProperty -Name "Team AllowChannelMentions" -Value $Team.AllowChannelMentions
      $userObj | Add-Member NoteProperty -Name "Team ShowInTeamsSearchAndSuggestions" -Value $Team.ShowInTeamsSearchAndSuggestions

      $output += $UserObj

      }
      }
      # update counters and write progress
      $i++
      Write-Progress -activity "Scanning Teams . . .Channels . . . Members" -status "Scanned: $i of $($AllTeams.Count)" -percentComplete (($i / $AllTeams.Count) * 100)
      $output | Export-csv -Path $CSVfile -NoTypeInformation -Encoding UTF8

      }
      ;Break}

      3 {
      $i = 0
      $Teamname = Read-Host "Enter the Team Display name or Range (Eg. Teamname , Team*,*Team)"
      $AllTeams = Get-Team | Where-object {$_.DisplayName -like $Teamname}
      Foreach ($Team in $AllTeams)
      {
      $AllChannels = Get-TeamChannel -GroupID $Team.GroupID
      Foreach ($Channel in $AllChannels)
      {
      $AllMembers = Get-TeamChannelUser -GroupId $Team.GroupID -DisplayName $channel.DisplayName
      Foreach ($member in $AllMembers)
      {
      $userObj = New-Object PSObject
      $userObj | Add-Member NoteProperty -Name "User SMTP Address" -Value $member.User
      $userObj | Add-Member NoteProperty -Name "Role" -Value $member.role
      $userObj | Add-Member NoteProperty -Name "Channel DisplayName" -Value $Channel.DisplayName
      $userObj | Add-Member NoteProperty -Name "Team DisplayName" -Value $Team.DisplayName

      $output += $UserObj

      }
      }
      # update counters and write progress
      $i++
      Write-Progress -activity "Scanning Teams . . .Channels . . . Members" -status "Scanned: $i of $($AllTeams.Count)" -percentComplete (($i / $AllTeams.Count) * 100)
      Write-Output $Output
      }
      ;Break}

      4 {
      $i = 0
      $CSVfile = Read-Host "Enter the Path of CSV file (Eg. C:\Teams.csv)"
      $Teamname = Read-Host "Enter the Team Display name or Range (Eg. Teamname , Team*,*Team)"
      $AllTeams = Get-Team | Where-object {$_.DisplayName -like $Teamname}
      Foreach ($Team in $AllTeams)
      {
      $AllChannels = Get-TeamChannel -GroupID $Team.GroupID
      Foreach ($Channel in $AllChannels)
      {
      $AllMembers = Get-TeamChannelUser -GroupId $Team.GroupID -DisplayName $channel.DisplayName
      Foreach ($member in $AllMembers)
      {
      $userObj = New-Object PSObject
      $userObj | Add-Member NoteProperty -Name "DisplayName" -Value $member.Name
      $userObj | Add-Member NoteProperty -Name "UserId" -Value $member.UserId
      $userObj | Add-Member NoteProperty -Name "User SMTP Address" -Value $member.User
      $userObj | Add-Member NoteProperty -Name "Role" -Value $member.role
      $userObj | Add-Member NoteProperty -Name "Channel DisplayName" -Value $Channel.DisplayName
      $userObj | Add-Member NoteProperty -Name "Channel Description" -Value $Channel.Description
      $userObj | Add-Member NoteProperty -Name "Channel MembershipType" -Value $Channel.MembershipType
      $userObj | Add-Member NoteProperty -Name "Team GroupID" -Value $Team.GroupId
      $userObj | Add-Member NoteProperty -Name "Team DisplayName" -Value $Team.DisplayName
      $userObj | Add-Member NoteProperty -Name "Team Description" -Value $Team.Description
      $userObj | Add-Member NoteProperty -Name "Team Visibility" -Value $Team.Visibility
      $userObj | Add-Member NoteProperty -Name "Team MailNickName" -Value $Team.MailNickName
      $userObj | Add-Member NoteProperty -Name "Team Classification" -Value $Team.Classification
      $userObj | Add-Member NoteProperty -Name "Team Archived" -Value $Team.Archived
      $userObj | Add-Member NoteProperty -Name "Team AllowGiphy" -Value $Team.AllowGiphy
      $userObj | Add-Member NoteProperty -Name "Team GiphyContentRating" -Value $Team.GiphyContentRating
      $userObj | Add-Member NoteProperty -Name "Team AllowStickersAndMemes" -Value $Team.AllowStickersAndMemes
      $userObj | Add-Member NoteProperty -Name "Team AllowGuestCreateUpdateChannels" -Value $Team.AllowGuestCreateUpdateChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowGuestDeleteChannels" -Value $Team.AllowGuestDeleteChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowCreateUpdateChannels" -Value $Team.AllowCreateUpdateChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowCreatePrivateChannels" -Value $Team.AllowCreatePrivateChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowDeleteChannels" -Value $Team.AllowDeleteChannels
      $userObj | Add-Member NoteProperty -Name "Team AllowAddRemoveApps" -Value $Team.AllowAddRemoveApps
      $userObj | Add-Member NoteProperty -Name "Team AllowCreateUpdateRemoveTabs" -Value $Team.AllowCreateUpdateRemoveTabs
      $userObj | Add-Member NoteProperty -Name "Team AllowCreateUpdateRemoveConnectors" -Value $Team.AllowCreateUpdateRemoveConnectors
      $userObj | Add-Member NoteProperty -Name "Team AllowUserEditMessages" -Value $Team.AllowUserEditMessages
      $userObj | Add-Member NoteProperty -Name "Team AllowUserDeleteMessages " -Value $Team.AllowUserDeleteMessages
      $userObj | Add-Member NoteProperty -Name "Team AllowOwnerDeleteMessages" -Value $Team.AllowOwnerDeleteMessages
      $userObj | Add-Member NoteProperty -Name "Team AllowTeamMentions" -Value $Team.AllowTeamMentions
      $userObj | Add-Member NoteProperty -Name "Team AllowChannelMentions" -Value $Team.AllowChannelMentions
      $userObj | Add-Member NoteProperty -Name "Team ShowInTeamsSearchAndSuggestions" -Value $Team.ShowInTeamsSearchAndSuggestions

      $output += $UserObj

      }
      }
      # update counters and write progress
      $i++
      Write-Progress -activity "Scanning Teams . . .Channels . . . Members" -status "Scanned: $i of $($AllTeams.Count)" -percentComplete (($i / $AllTeams.Count) * 100)
      $output | Export-csv -Path $CSVfile -NoTypeInformation -Encoding UTF8

      }
      ;Break}

      Default {Write-Host "No matches found , Enter Options 1 or 2" -ForeGround "red"}

      }

      If I have answered your question, please mark your post as Solved

      If you like my response, please give it a Like :smile: