From 95a479bf15b3519efd429b23e21ef2bb8a208498 Mon Sep 17 00:00:00 2001 From: AdminDroid <49208841+admindroid-community@users.noreply.github.com> Date: Mon, 7 Jul 2025 15:22:59 +0530 Subject: [PATCH] Find Teams Channels with External Members Due to issue in MS Graph PowerShell (Version 2.27.0 or 2.28.0), API call is used to retrieve external membership. --- .../FindTeamsChannelsWithExternalMembers.ps1 | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/Find Teams Channels with External Users/FindTeamsChannelsWithExternalMembers.ps1 b/Find Teams Channels with External Users/FindTeamsChannelsWithExternalMembers.ps1 index 41c957c..40d9bf0 100644 --- a/Find Teams Channels with External Users/FindTeamsChannelsWithExternalMembers.ps1 +++ b/Find Teams Channels with External Users/FindTeamsChannelsWithExternalMembers.ps1 @@ -1,7 +1,7 @@ <# ============================================================================================= Name: Find All Team Channels with External Members in Microsoft 365 -Version: 1.0 +Version: 1.1 Website: o365reports.com Script Highlights: @@ -16,6 +16,12 @@ Script Highlights: 6. It can be executed with certificate-based authentication (CBA) too. 7. The script is schedular-friendly. +Change log: +~~~~~~~~~~~ +V1.0 (Feb 04, 2025) – File created. +V1.1 (Jul 07, 2025) – Due to issue in MS Graph PowerShell cmdlet, API call is used to retrieve external membership. + + For detailed Script execution: https://o365reports.com/2025/02/04/get-all-teams-channels-with-external-members/ ============================================================================================ #> @@ -125,30 +131,37 @@ Get-MgTeam -Filter "$($TeamFilter)" -All | ForEach-Object { $ExternalMembers = @() $ExternalUserFound = $false Write-Progress -Activity "`n Processed Teams count: $ProcessedTeamsCount"`n" Processing Channel: $($ChannelDisplayName) from Team: $($TeamDisplayName)" + + #Get-MgTeamChannelMember -All -Team $TeamId -Channel $ChannelId | ForEach-Object { + try { + (Invoke-MgGraphRequest -Method GET -Uri "/v1.0/teams/$($TeamId)/channels/$($ChannelId)/members" -ErrorAction Stop).value | ForEach-Object { + $ExternalMemberTenantId = $_.tenantId + if (($ExternalMemberTenantId -ne $TenantId) -or ($_.roles -contains "guest")) { + $ExternalMemberName = $_.displayName + $ExternalMemberEmail = $_.email + $ExternalMemberGuid = $_.userId - Get-MgTeamChannelMember -All -Team $TeamId -Channel $ChannelId | ForEach-Object { - $ExternalMemberTenantId = $_.AdditionalProperties["tenantId"] - if (($ExternalMemberTenantId -ne $TenantId) -or ($_.Roles -contains "guest")){ - $ExternalMemberName = $_.DisplayName - $ExternalMemberEmail = $_.AdditionalProperties["email"] - $ExternalMemberGuid = $_.AdditionalProperties["userId"] + if (($MembershipType -notin @("standard","private"))) { $MembershipType = "shared" } - if (($MembershipType -notin @("standard","private"))) { $MembershipType = "shared" } + # Apply filters based on params + if (!([string]::IsNullOrEmpty($MemberUPN)) -and ($MemberUPN -ne $ExternalMemberEmail)) { return } + if (!([string]::IsNullOrEmpty($ChannelType)) -and ($ChannelType -ne $MembershipType)) { return } - # Apply filters based on params - if (!([string]::IsNullOrEmpty($MemberUPN)) -and ($MemberUPN -ne $ExternalMemberEmail)) { return } - if (!([string]::IsNullOrEmpty($ChannelType)) -and ($ChannelType -ne $MembershipType)) { return } - - $ExternalUserFound = $true - $ExternalMembersCount++ - $ExternalMembers += $ExternalMemberEmail - Print_DetailedReportContent + $ExternalUserFound = $true + $ExternalMembersCount++ + $ExternalMembers += $ExternalMemberEmail + Print_DetailedReportContent + } } + if ($ExternalUserFound) { + $ExternalMembers = $ExternalMembers -join ", " + $TeamsChannelsWithExternalMembersCount++ + Print_SummaryReportContent + } + } - if ($ExternalUserFound) { - $ExternalMembers = $ExternalMembers -join ", " - $TeamsChannelsWithExternalMembersCount++ - Print_SummaryReportContent + catch { + Write-Host "Error occurred while fetching members for Channel: $($ChannelDisplayName) in Team: $($TeamDisplayName)." } } }