Forum Discussion
Get all Teams and channel information using PowerShell
- Apr 16, 2020
Hi gcjuw84
Here is the link of commands for your reference.
Export all the Teams Channel in Office 365 Tenant
https://gallery.technet.microsoft.com/office/Export-Teams-Channel-de703ad0
With Regards,
Satish U
Can you post the final script.
I am having trouble with exporting the channels with this script.
No problem, the final script is below. Before running the script you need to make sure you run Connect-MicrosoftTeams and Connect-ExchangeOnline.
Any problems let me know.
$AllTeamsInOrg = (Get-Team).GroupID
$TeamList = @()
Write-Output "This may take a little bit of time... Please sit back, relax and enjoy some GIFs inside of Teams!"
Write-Host ""
Foreach ($Team in $AllTeamsInOrg)
{
$TeamGUID = $Team.ToString()
$TeamGroup = Get-UnifiedGroup -identity $Team.ToString()
$TeamName = (Get-Team | ?{$_.GroupID -eq $Team}).DisplayName
$TeamOwner = (Get-TeamUser -GroupId $Team | ?{$_.Role -eq 'Owner'}).User
$TeamUserCount = ((Get-TeamUser -GroupId $Team).UserID).Count
$TeamGuest = (Get-UnifiedGroupLinks -LinkType Members -identity $Team | ?{$_.Name -match "#EXT#"}).Name
if ($TeamGuest -eq $null)
{
$TeamGuest = "No Guests in Team"
}
$TeamChannels = (Get-TeamChannel -GroupId $Team).DisplayName
$ChannelCount = (Get-TeamChannel -GroupId $Team).ID.Count
$TeamList = $TeamList + [PSCustomObject]@{TeamName = $TeamName; TeamObjectID = $TeamGUID; TeamOwners = $TeamOwner -join ', '; TeamMemberCount = $TeamUserCount; NoOfChannels = $ChannelCount; ChannelNames = $TeamChannels -join ', '; SharePointSite = $TeamGroup.SharePointSiteURL; AccessType = $TeamGroup.AccessType; TeamGuests = $TeamGuest -join ','}
}
#######
$TestPath = test-path -path 'c:\temp'
if ($TestPath -ne $true) {New-Item -ItemType directory -Path 'c:\temp' | Out-Null
write-Host 'Creating directory to write file to c:\temp. Your file is uploaded as TeamsDatav2.csv'}
else {Write-Host "Your file has been uploaded to c:\temp as 'TeamsDatav2.csv'"}
$TeamList | export-csv c:\temp\TeamsDatav2.csv -NoTypeInformation
- SebCerazyFeb 06, 2023Iron ContributorAfter 10 hours of running the script, eventually all I got is:
Write-ErrorMessage : The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.- EnviableOneFeb 17, 2023Copper Contributor90% of the time, its better to filter on the server side, this might work a little faster, and will give you some feedback:
$clock = [System.Diagnostics.Stopwatch]::StartNew()
write-host "Connecting to MS and loading teams please wait..." -NoNewline
$AllTeamsInOrg = Get-Team
$Teamcount = $AllTeamsInOrg.count
write-host "Teams loaded ("
$TeamList = @()
$i = 0
Write-Host "This may take a little bit of time... Please sit back, relax and enjoy some GIFs inside of Teams!"
Foreach ($Team in $AllTeamsInOrg){
$i++
Write-host "Processing Team $i of $teamcount ($($team.displayname)) ..." -NoNewline -ForegroundColor Gray
$TeamGUID = $Team.groupid
$TeamGroup = Get-UnifiedGroup -identity $Team.GroupId
$TeamName = $Team.DisplayName
$TeamOwner = (Get-TeamUser -GroupId $Team.GroupId -Role Owner).User
$TeamUserCount = (Get-TeamUser -GroupId $Team.GroupId).Count
$TeamGuest = (Get-TeamUser -GroupId $Team.GroupId -Role Guest).Name
if ($TeamGuest -eq $null){
$TeamGuest = "No Guests in Team"
}
$TeamChannels = (Get-TeamChannel -GroupId $Team.GroupId).DisplayName
$ChannelCount = (Get-TeamChannel -GroupId $Team.GroupId).Count
$TeamList += [PSCustomObject]@{TeamName = $TeamName; TeamObjectID = $TeamGUID; TeamOwners = $TeamOwner -join ', '; TeamMemberCount = $TeamUserCount; NoOfChannels = $ChannelCount; ChannelNames = $TeamChannels -join ', '; SharePointSite = $TeamGroup.SharePointSiteURL; AccessType = $TeamGroup.AccessType; TeamGuests = $TeamGuest -join ','}
Write-host "done." -ForegroundColor Green
}
#######
$pathtest = test-path -path 'c:\temp'
if ($pathtest) {New-Item -ItemType directory -Path 'c:\temp' | Out-Null
write-Host 'Creating directory to write file to c:\temp.'
}
$TeamList | export-csv c:\temp\TeamsDatav2.csv -NoTypeInformation
$clock.Stop()
Write-Host "Completed. Written to: 'c:\temp\TeamsDatav2.csv'" -ForegroundColor Yellow
Write-Host "$i Teams Loaded, Time taken $($clock.elapsed.ToString("G"))" -ForegroundColor Yellow
- Marcus TarquinioMay 04, 2021Brass ContributorDears,
Thanks for sharing the script and ideas. I am expanding on this and when I try to find if the user is a member or owner of the Team Channels they belong to using Get-TeamChannelUser as described in the documentation, it does not work.
https://docs.microsoft.com/en-us/powershell/module/teams/get-teamchanneluser?view=teams-ps
Do anyone know how to get the information if a user is a member or owner of a Team Channel?
Thanks
$MyTeams = Get-Team -User bob@contoso.com
Foreach ($Team in $MyTeams)
{
Get-TeamChannel -GroupId $Team.GroupId
Get-TeamChannelUser -GroupId $Team.GroupId
}- colynykalphiacomDec 28, 2022Copper ContributorI am looking for this as well. I need powershell to loop through all Teams, report users access level (eg, owner, member or guest) and then loop through all the channels of that team to export users access level of each channel. And do this for each Teams. Anyone have an example?
- Dietmar_Zilz__ReplyJan 26, 2023Copper Contributor
colynykalphiacom - were you able to do this? I am currently still exploring this as well.
- SebCerazyApr 30, 2021Iron Contributor
Stuck on:
Creating a new Remote PowerShell session using Modern Authentication for implicit remoting of "Get-UnifiedGroupLinks" command ...
- amkaccion1966Nov 26, 2020Copper Contributor
I have used the scrip and it is great!
But I see that it only lists the public channels.
Some way you list the public and private?
thanks
- gcjuw84Dec 07, 2020Brass Contributor
I've just tested this my end and the script seems to show both public and private channels. The Get-TeamChannel should show all channels regardless of whether they're public or private and this is what's used in the script.
If you go into the Teams Admin Centre and view team details via the Manage Teams can you see private channels for a team that has them there?
- Sebastian Di CeccaMay 19, 2020Copper Contributor
Thanks alot! I'll give it a try!