From bcb0b301290471019d44b3fd6ef6264d455bfa5d Mon Sep 17 00:00:00 2001 From: AdminDroid <49208841+admindroid-community@users.noreply.github.com> Date: Fri, 29 May 2020 15:06:29 +0530 Subject: [PATCH] Create TeamsReports.ps1 Microsoft teams reports --- Microsoft Teams Reports/TeamsReports.ps1 | 299 +++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 Microsoft Teams Reports/TeamsReports.ps1 diff --git a/Microsoft Teams Reports/TeamsReports.ps1 b/Microsoft Teams Reports/TeamsReports.ps1 new file mode 100644 index 0000000..5838f91 --- /dev/null +++ b/Microsoft Teams Reports/TeamsReports.ps1 @@ -0,0 +1,299 @@ +#Accept input paramenters +param( +[string]$UserName, +[string]$Password, +[switch]$MFA, +[int]$Action +) + +#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 + } + else + { + Write-Host MicrosoftTeams module is required.Please install module using Install-Module MicrosoftTeams cmdlet. + Exit + } +} +Write-Host Importing Microsoft Teams module... -ForegroundColor Yellow +#Autentication using MFA +if($mfa.IsPresent) +{ + $Team=Connect-MicrosoftTeams +} + +#Authentication using non-MFA +else +{ + #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 + $Team=Connect-MicrosoftTeams -Credential $Credential + } + else + { + $Team=Connect-MicrosoftTeams + } +} + +#Check for Teams connectivity +If($Team -ne $null) +{ + Write-host `nSuccessfully connected to Microsoft Teams -ForegroundColor Green +} +else +{ + Write-Host Error occurred while creating Teams session. Please try again -ForegroundColor Red + exit +} + +[boolean]$Delay=$false +Do { + if($Action -eq "") + { + if($Delay -eq $true) + { + Start-Sleep -Seconds 2 + } + $Delay=$true + Write-Host "" + Write-host `nMicrosoft Teams Reporting -ForegroundColor Yellow + Write-Host " 1.All Teams in organization" -ForegroundColor Cyan + Write-Host " 2.All Teams members and owners report" -ForegroundColor Cyan + Write-Host " 3.Specific Teams' members and Owners report" -ForegroundColor Cyan + Write-Host " 4.All Teams' owners report" -ForegroundColor Cyan + Write-Host " 5.Specific Teams' owners report" -ForegroundColor Cyan + Write-Host `nTeams Channel Reporting -ForegroundColor Yellow + Write-Host " 6.All channels in organization" -ForegroundColor Cyan + Write-Host " 7.All channels in specific Team" -ForegroundColor Cyan + Write-Host " 8.Members and Owners Report of Single Channel" -ForegroundColor Cyan + Write-Host " 0.Exit" -ForegroundColor Cyan + Write-Host `nPrivate Channel Management and Reporting -ForegroundColor Yellow + Write-Host " You can download the script from https://blog.admindroid.com/managing-private-channels-in-microsoft-teams/" -ForegroundColor Cyan + Write-Host "" + $i = Read-Host 'Please choose the action to continue' + } + else + { + $i=$Action + } + + Switch ($i) { + 1 { + $Result="" + $Results=@() + $Path="./All Teams Report_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" + Write-Host Exporting all Teams report... + $Count=0 + Get-Team | foreach { + $TeamName=$_.DisplayName + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing: $TeamName" + $Count++ + $Visibility=$_.Visibility + $MailNickName=$_.MailNickName + $Description=$_.Description + $Archived=$_.Archived + $GroupId=$_.GroupId + $ChannelCount=(Get-TeamChannel -GroupId $GroupId).count + $TeamUser=Get-TeamUser -GroupId $GroupId + $TeamMemberCount=$TeamUser.Count + $TeamOwnerCount=($TeamUser | ?{$_.role -eq "Owner"}).count + $Result=@{'Teams Name'=$TeamName;'Team Type'=$Visibility;'Mail Nick Name'=$MailNickName;'Description'=$Description;'Archived Status'=$Archived;'Channel Count'=$ChannelCount;'Team Members Count'=$TeamMemberCount;'Team Owners Count'=$TeamOwnerCount} + $Results= New-Object psobject -Property $Result + $Results | select 'Teams Name','Team Type','Mail Nick Name','Description','Archived Status','Channel Count','Team Members Count','Team Owners Count' | Export-Csv $Path -NoTypeInformation -Append + } + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing: $TeamName" -Completed + if((Test-Path -Path $Path) -eq "True") + { + Write-Host `nReport available in $Path -ForegroundColor Green + } + } + 2 { + $Result="" + $Results=@() + $Path="./All Teams Members and Owner Report_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" + Write-Host Exporting all Teams members and owners report... + $Count=0 + Get-Team | foreach { + $TeamName=$_.DisplayName + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing: $TeamName" + $Count++ + $GroupId=$_.GroupId + Get-TeamUser -GroupId $GroupId | foreach { + $Name=$_.Name + $MemberMail=$_.User + $Role=$_.Role + $Result=@{'Teams Name'=$TeamName;'Member Name'=$Name;'Member Mail'=$MemberMail;'Role'=$Role} + $Results= New-Object psobject -Property $Result + $Results | select 'Teams Name','Member Name','Member Mail','Role' | Export-Csv $Path -NoTypeInformation -Append + } + } + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing: $TeamName" -Completed + if((Test-Path -Path $Path) -eq "True") + { + Write-Host `nReport available in $Path -ForegroundColor Green + } + } + + 3 { + $Result="" + $Results=@() + $TeamName=Read-Host Enter Teams name to get members report "(Case sensitive)": + $GroupId=(Get-Team -DisplayName $TeamName).GroupId + Write-Host Exporting $TeamName"'s" Members and Owners report... + $Path=".\MembersOf $TeamName Team Report _$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" + Get-TeamUser -GroupId $GroupId | foreach { + $Name=$_.Name + $MemberMail=$_.User + $Role=$_.Role + $Result=@{'Member Name'=$Name;'Member Mail'=$MemberMail;'Role'=$Role} + $Results= New-Object psobject -Property $Result + $Results | select 'Member Name','Member Mail','Role' | Export-Csv $Path -NoTypeInformation -Append + } + if((Test-Path -Path $Path) -eq "True") + { + Write-Host `nReport available in $Path -ForegroundColor Green + } + } + + 4 { + $Result="" + $Results=@() + $Path="./All Teams Owner Report_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" + Write-Host Exporting all Teams owner report... + $Count=0 + Get-Team | foreach { + $TeamName=$_.DisplayName + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing: $TeamName" + $Count++ + $GroupId=$_.GroupId + Get-TeamUser -GroupId $GroupId | ?{$_.role -eq "Owner"} | foreach { + $Name=$_.Name + $MemberMail=$_.User + $Result=@{'Teams Name'=$TeamName;'Owner Name'=$Name;'Owner Mail'=$MemberMail} + $Results= New-Object psobject -Property $Result + $Results | select 'Teams Name','Owner Name','Owner Mail' | Export-Csv $Path -NoTypeInformation -Append + } + } + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing: $TeamName" -Completed + if((Test-Path -Path $Path) -eq "True") + { + Write-Host `nReport available in $Path -ForegroundColor Green + } + } + + 5 { + $Result="" + $Results=@() + $TeamName=Read-Host Enter Teams name to get owners report "(Case sensitive)": + $GroupId=(Get-Team -DisplayName $TeamName).GroupId + Write-Host Exporting $TeamName team"'"s Owners report... + $Path=".\OwnersOf $TeamName team report_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" + Get-TeamUser -GroupId $GroupId | ?{$_.role -eq "Owner"} | foreach { + $Name=$_.Name + $MemberMail=$_.User + $Result=@{'Member Name'=$Name;'Member Mail'=$MemberMail} + $Results= New-Object psobject -Property $Result + $Results | select 'Member Name','Member Mail' | Export-Csv $Path -NoTypeInformation -Append + } + if((Test-Path -Path $Path) -eq "True") + { + Write-Host `nReport available in $Path -ForegroundColor Green + } + } + + 6 { + $Result="" + $Results=@() + $Path="./All Channels Report_$((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" + Write-Host Exporting all Channels report... + $Count=0 + Get-Team | foreach { + $TeamName=$_.DisplayName + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing Team: $TeamName " + $Count++ + $GroupId=$_.GroupId + Get-TeamChannel -GroupId $GroupId | foreach { + $ChannelName=$_.DisplayName + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing Team: $TeamName "`n" Currently Processing Channel: $ChannelName" + $MembershipType=$_.MembershipType + $Description=$_.Description + $ChannelUser=Get-TeamChannelUser -GroupId $GroupId -DisplayName $ChannelName + $ChannelMemberCount=$ChannelUser.Count + $ChannelOwnerCount=($ChannelUser | ?{$_.role -eq "Owner"}).count + $Result=@{'Teams Name'=$TeamName;'Channel Name'=$ChannelName;'Membership Type'=$MembershipType;'Description'=$Description;'Total Members Count'=$ChannelMemberCount;'Owners Count'=$ChannelOwnerCount} + $Results= New-Object psobject -Property $Result + $Results | select 'Teams Name','Channel Name','Membership Type','Description','Owners Count','Total Members Count' | Export-Csv $Path -NoTypeInformation -Append + } + } + Write-Progress -Activity "`n Processed Teams count: $Count "`n" Currently Processing: $TeamName `n Currently Processing Channel: $ChannelName" -Completed + if((Test-Path -Path $Path) -eq "True") + { + Write-Host `nReport available in $Path -ForegroundColor Green + } + } + + 7 { + $TeamName=Read-Host Enter Teams name "(Case Sensitive)" + Write-Host Exporting Channels report... + $Count=0 + $GroupId=(Get-Team -DisplayName $TeamName).GroupId + $Path=".\Channels available in $TeamName team $((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" + Get-TeamChannel -GroupId $GroupId | Foreach { + $ChannelName=$_.DisplayName + Write-Progress -Activity "`n Processed channel count: $Count "`n" Currently Processing Channel: $ChannelName" + $Count++ + $MembershipType=$_.MembershipType + $Description=$_.Description + $ChannelUser=Get-TeamChannelUser -GroupId $GroupId -DisplayName $ChannelName + $ChannelMemberCount=$ChannelUser.Count + $ChannelOwnerCount=($ChannelUser | ?{$_.role -eq "Owner"}).count + $Result=@{'Teams Name'=$TeamName;'Channel Name'=$ChannelName;'Membership Type'=$MembershipType;'Description'=$Description;'Total Members Count'=$ChannelMemberCount;'Owners Count'=$ChannelOwnerCount} + $Results= New-Object psobject -Property $Result + $Results | select 'Teams Name','Channel Name','Membership Type','Description','Owners Count','Total Members Count' | Export-Csv $Path -NoTypeInformation -Append + } + Write-Progress -Activity "`n Processed channel count: $Count "`n" Currently Processing Channel: $ChannelName" -Completed + if((Test-Path -Path $Path) -eq "True") + { + Write-Host `nReport available in $Path -ForegroundColor Green + } + } + + 8 { + $Result="" + $Results=@() + $TeamName=Read-Host Enter Teams name in which Channel resides "(Case sensitive)" + $ChannelName=Read-Host Enter Channel name + $GroupId=(Get-Team -DisplayName $TeamName).GroupId + Write-Host Exporting $ChannelName"'s" Members and Owners report... + $Path=".\MembersOf $ChannelName channel report $((Get-Date -format yyyy-MMM-dd-ddd` hh-mm` tt).ToString()).csv" + Get-TeamChannelUser -GroupId $GroupId -DisplayName $ChannelName | foreach { + $Name=$_.Name + $UPN=$_.User + $Role=$_.Role + $Result=@{'Teams Name'=$TeamName;'Channel Name'=$ChannelName;'Member Mail'=$UPN;'Member Name'=$Name;'Role'=$Role} + $Results= New-Object psobject -Property $Result + $Results | select 'Teams Name','Channel Name','Member Name','Member Mail',Role | Export-Csv $Path -NoTypeInformation -Append + } + if((Test-Path -Path $Path) -eq "True") + { + Write-Host `nReport available in $Path -ForegroundColor Green + } + } + + } + if($Action -ne "") + {exit} +} + While ($i -ne 0) + Clear-Host + \ No newline at end of file