Populate the Membership of a Teams Shared Channel for All Users

Create an Organization-Wide Communication Channel

When Microsoft delivers a feature like Teams shared channels, it can take some time for an organization to figure out how to use the new capability. This is especially true when external collaboration is in the mix. It’s sometimes easier to start to use a feature within the tenant before expanding it to accommodate external access.

One way to use shared channels is as an organization-wide communication channel. For example, the IT Help Desk could have a shared channel for users to ask questions (or maybe a set of shared channels to split questions up over different technologies). In this scenario, the channel owners must share the channel to make it available to users, so the question becomes how best to share a channel with large numbers of users.

Teams Shared Channels and Org-Wide Teams

You can share a channel with a team, and if your organization has fewer than 10,000 accounts, you might use org-wide teams to take advantage of their automatic membership management capabilities. Sharing a channel with an org-wide team sounds like an excellent way to make a channel available to everyone, but Teams doesn’t allow this to happen. When you got to share a channel with a team, org-wide teams are excluded (Figure 1).

You can't share a channel with an org-wide team

Teams Shared Channel
Figure 1: You can’t share a channel with an org-wide team

A shared channel can be shared with up to 50 other teams.

Teams Shared Channels and Dynamic Teams

Dynamic teams are supported for shared channel membership, so you could create a dynamic Azure AD group with a filter to find all licensed user accounts (Figure 2) and team-enable the group. The downside is that dynamic Azure AD groups require Azure AD Premium P1 licenses, which might or might not be an issue for the organization.

A Dynamic Azure AD Group for all Teams users
Figure 2: A Dynamic Azure AD Group for all Teams users

DIY Membership Management via PowerShell

The alternative is to create your own shared channel membership mechanism. This is easily done with PowerShell, but only if you can keep the number of direct members of a shared channel to under 5,000 (including any teams you share the channel with). This is considerably less than the current 25,000 member limit for a team. Theoretically, you could share a channel with 50 teams, each having 5,000 users, to achieve wider coverage in a very large organization (I have not tried this). In this scenario, Microsoft cautions that real-time updates for shared channel content are “only available to 25,000 users at a time,” meaning that some users won’t get updates as quickly as others do.

Microsoft hasn’t said if they will raise the limit for direct membership of shared channels in the future but given previous history and the need to service some very large customers, it would be no surprise if they did.

In terms of populating the membership of a Teams shared channel with PowerShell, the task is straightforward:

  • Identify the set of user accounts (with Teams licenses) to add to the shared channel.
  • Find the current membership and owners of the shared channel.
  • For each of the input set, check if they are a member. If not, add them.

In a script written to test the principle of how to populate the membership of a Teams shared channel (available from GitHub), I:

  • Connect to Microsoft Teams and the Microsoft Graph PowerShell SDK.
  • Use the Get-MgUser cmdlet to find the set of users with licenses (this avoids accounts created for room accounts, etc.).
  • Filter out any accounts we don’t want to add to the shared channels. For instance, you might decide that you don’t want to add accounts holding administrative roles like global administrators because these accounts should not be used for day-to-day user tasks. I use a simple filter against the Office location property.
  • Check each account to make sure that it has a Teams license that is enabled. Teams is included in many different Microsoft 365 products, so we check each account using the Get-MgUserLicenseDetail cmdlet to make sure that the Teams service plan is successfully assigned. See this article for more information about Azure AD license management using PowerShell.
  • Use the Get-TeamChannelUser cmdlet to get the current channel ownership and membership and store the information in a hash table.
  • Compare each user in the array of accounts with Teams licenses against the current shared channel membership and add any missing accounts with the Add-TeamChannelUser cmdlet.

Now on to Scheduling

The advantage of doing something like this with PowerShell is that you have full control over the membership of the shared channel. The disadvantages are the need to update and maintains scripts over time and to make sure that the script runs regularly to pick up new accounts. Azure Automation seems like the right way to schedule the script, but that’s another day’s work.

Stay updated with developments across the Microsoft 365 ecosystem by subscribing to the Office 365 for IT Pros eBook. We do the research to make sure that our readers understand the technology.

3 Replies to “Populate the Membership of a Teams Shared Channel for All Users”

  1. This information on shared channels should be incorporated into the best practices docs on the microsoft docs web site. Has anyone submitted this information to microsoft so it can be added to the published best practices documentation?

    The microsoft docs web site should be updated to reflect this type information so that it is an agreed upon recommendation for the ms 365 community.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.