2023-03-14 18:11:20 +05:30
<#
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Name : Microsoft Teams Shared Channel Members Report
2023-09-28 12:41:57 +05:30
Website : o365reports . com
Script Highlights :
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
1 . A single script allows you to generate shared channel reports for all teams or a specific team .
2 . The script can be executed with MFA enabled accounts too .
3 . Exports output to CSV .
4 . Automatically installs Microsoft Teams PowerShell module ( if not installed already ) upon your confirmation .
5 . It generates 2 output files . One is shared channels report , and another is shared channel membership report .
6 . The script is scheduler friendly . I . e . , Credential can be passed as a parameter instead of saving inside the script .
7 . Supports certificate-based authentication .
2023-03-14 18:11:20 +05:30
For detailed Script execution : https : / / o365reports . com / 2023 / 02 / 28 / ms-teams -shared -channel -membership -report
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
#>
param (
[ string ] $UserName ,
[ string ] $Password ,
[ string ] $CertificateThumbprint ,
[ string ] $ApplicationId ,
[ string ] $TenantId ,
[ string ] $TeamName
)
#Connect to Microsoft Teams
$Module = Get-Module -Name MicrosoftTeams -ListAvailable
if ( $Module . count -eq 0 )
{
Write-Host MicrosoftTeams module is not available -ForegroundColor yellow
$Confirm = Read-Host Are you sure you want to install module ? [ Y] Yes [N ] No
if ( $Confirm -match " [yY] " )
{
Install-Module MicrosoftTeams -Scope CurrentUser
}
else
{
Write-Host MicrosoftTeams module is required . Please install module using Install-Module MicrosoftTeams cmdlet .
Exit
}
}
#Storing credential in script for scheduling purpose/ Passing credential as parameter
if ( ( $UserName -ne " " ) -and ( $Password -ne " " ) )
{
$SecuredPassword = ConvertTo-SecureString -AsPlainText $Password -Force
$Credential = New-Object System . Management . Automation . PSCredential $UserName , $SecuredPassword
Connect-MicrosoftTeams -Credential $Credential
}
elseif ( ( $CertificateThumbprint -ne " " ) -and ( $ApplicationId -ne " " ) -and ( $TenantId -ne " " ) )
{
Connect-MicrosoftTeams -CertificateThumbprint $CertificateThumbprint -ApplicationId $ApplicationId -TenantId $TenantId
}
else
{
Connect-MicrosoftTeams | Out-Null
}
Function Process_TeamChannel
{
Get-TeamAllChannel -GroupId $TeamId -MembershipType Shared | foreach {
$global:SharedChannelCount + +
$ChannelName = $_ . DisplayName
$Description = $_ . Description
$HostTeamId = $_ . HostTeamId
if ( $Description -eq $null )
{
$Description = " - "
}
if ( $HostTeamId -eq $TeamId )
{
$SharedChannelType = " Team hosted channel "
}
else
{
$SharedChannelType = " Incoming channel "
}
$Membership = Get-TeamChannelUser -GroupId $HostTeamId -DisplayName $ChannelName
$AllMembers = ( @ ( $Membership . user ) -join ',' )
$MembersCount = $Membership . Count
#Exporting shared channel summary report
$Result = @ { 'Team Name' = $Teamname ; 'Shared Channel Name' = $ChannelName ; 'Shared Channel Type' = $SharedChannelType ; 'Description' = $Description ; 'Channel Members' = $AllMembers ; 'Members Count' = $MembersCount }
$Results = New-Object PSObject -Property $Result
$Results | select-object 'Team Name' , 'Shared Channel Name' , 'Shared Channel Type' , 'Description' , 'Members Count' , 'Channel Members' | Export-Csv -Path $OutputCSVName -Notype -Append
foreach ( $Member in $Membership )
{
$Name = $Member . Name
$Email = $Member . User
$Role = $Member . Role
$Output = @ { 'Team Name' = $Teamname ; 'Shared Channel Name' = $ChannelName ; 'Shared Channel Type' = $SharedChannelType ; 'Description' = $Description ; 'Member Name' = $Name ; 'Member Email' = $Email ; 'Role' = $Role }
$Outputs = New-Object PSObject -Property $Output
$Outputs | Select-Object 'Team Name' , 'Shared Channel Name' , 'Shared Channel Type' , 'Description' , 'Member Name' , 'Member Email' , 'Role' | Export-Csv -Path $OutputCSV -Notype -Append
}
}
}
$Result = " "
$Results = @ ( )
$Output = " "
$Outputs = @ ( )
$OutputCSVName = " .\SharedChannelReport_ $( ( Get-Date -format yyyy-MMM -dd -ddd ` hh-mm ` tt ) . ToString ( ) ) .csv "
$OutputCSV = " .\Detailed_SharedChannelMembershipReport_ $( ( Get-Date -format yyyy-MMM -dd -ddd ` hh-mm ` tt ) . ToString ( ) ) .csv "
Write-Host Generating shared channel membership report . . . -ForegroundColor Yellow
$ProcessedCount = 0
$global:SharedChannelCount = 0
#Process all teams
if ( $TeamName -eq " " )
{
Get-Team | foreach {
$TeamName = $_ . DisplayName
$TeamId = $_ . GroupId
$ProcessedCount + +
Write-Progress -Activity " `n Processed teams count: $ProcessedCount " ` n " Currently Processing team: $TeamName "
Process_TeamChannel
}
}
else
{
$TeamDetails = Get-Team -DisplayName $TeamName
if ( $TeamDetails -eq $null )
{
Write-Host Team $TeamName is not available . Please check the team name . -ForegroundColor Red
}
else
{
$TeamId = $TeamDetails . GroupId
Process_TeamChannel
}
}
#Open output file after execution
Write-Host ` nScript executed successfully
Write-Host ` n $SharedChannelCount shared channels exported in the output file .
if ( ( Test-Path -Path $OutputCSVName ) -eq " True " )
{
2023-09-28 12:41:57 +05:30
Write-Host ` n " Shared channel summary report available in: " -NoNewline -ForegroundColor Yellow ; Write-Host " $OutputCSVName " ` n
Write-Host ` n " Detailed shared channel membership report available in: " -NoNewline -ForegroundColor Yellow ; Write-Host " $OutputCSV " ` n
2023-03-14 18:11:20 +05:30
$Prompt = New-Object -ComObject wscript . shell
$UserInput = $Prompt . popup ( " Do you want to open output file? " , `
0 , " Open Output File " , 4 )
If ( $UserInput -eq 6 )
{
Invoke-Item " $OutputCSVName "
Invoke-Item " $OutputCSV "
2023-09-28 12:41:57 +05:30
}
Write-Host ` n ~ ~ Script prepared by AdminDroid Community ~ ~ ` n -ForegroundColor Green
Write-Host " ~~ Check out " -NoNewline -ForegroundColor Green ; Write-Host " admindroid.com " -ForegroundColor Yellow -NoNewline ; Write-Host " to get access to 1800+ Microsoft 365 reports. ~~ " -ForegroundColor Green ` n ` n
2023-03-14 18:11:20 +05:30
}