Apr 17 2020 09:26 AM
Hello,
It is sad and strange that most of the Exchange online commandlets do not show users email addresses
for e.g. Get-UnifiedGroups or Get-Recipient etc....
Also at the time as the number of teams increase on the tenant it is impossible to generate reports showing Team details and its owner details in email format ???
BR,
/HS
Apr 17 2020 03:10 PM
Hello @Himanshu Singh , what you mean by not displaying the emails? have you tried selecting the desired object attribute like:
get-recipient | select PrimarySMTPAddress
For the Unified groups, you get the unified group primary SMTP address the same way
Get-UnifiedGroup | select PrimarySMTPAddress
and for the members, you can pipe it like this.
Get-UnifiedGroup | Get-UnifiedGroupLinks -LinkType Member | select PrimarySMTPAddress
For your last question, you can use this code to generate the report displaying the owner's email address using the above examples.
$Groups = Get-UnifiedGroup | select managedby, DisplayName #Here you can select and filter the groups that you need a report
$Result = @()
Foreach($Group in $Groups)
{
$MailsOwners = @()
Foreach($Owner in $Group.ManagedBy)
{
$MailOwner = $null
$MailOwner = Get-Recipient $Owner | select PrimarySMTPAddress
$MailsOwners += $MailOwner.PrimarySMTPAddress
}
$MailsOwners = $MailsOwners -join ";"
$Props = $null
$Props = [ordered]@{
GroupDisplayName = $Group.DisplayName
GroupOwnersMails = $MailsOwners
}
$Outputtmp = New-Object PSObject -Property $Props
$Result += $Outputtmp
}
$Result | Export-Csv "Report.csv" -NoTypeInformation -Encoding UTF8
Please let me know if you have any further questions about this.
Regards
Erick A. Moreno
Apr 18 2020 12:29 PM
Many thanks i am testing your script, however my real issue is the time this reports takes to finish i have more 10K teams or say even more O365 groups it takes more 2-3 hrs for this report if it completes, as for last few times powershell session disconnects before the script can generate all details
however to save sometime i have attempted to take only one owner for each group see following and suggest further optimization if possible
Import-Module $((Get-ChildItem -Path $($env:LOCALAPPDATA+"\Apps\2.0\") -Filter Microsoft.Exchange.Management.ExoPowershellModule.dll -Recurse ).FullName|?{$_ -notmatch "_none_"}|select -First 1)
$Session=New-ExoPSSession
Import-PSSession $Session -AllowClobber -Verbose
$teamsgroups = (Get-UnifiedGroup -ResultSize Unlimited | Select DisplayName,Alias,Name,ResourceProvisioningOptions,AccessType,Classification,Language,ExchangeGuid,ManagedBy)
#notification for powershell
Write-Host "Getting Office 365 Groups created with MS Teams... " -ForegroundColor Green
#generate array for teamsgroups
$teams = @()
#loop to get information
ForEach ($group in $teamsgroups){
#get-members of group
$identity = (($group).ExchangeGuid)
$owners = (Get-UnifiedGroupLinks -Identity "$identity" -LinkType Owners | Select-Object PrimarySMTPAddress)
$owner = (($owners[0]).primarySMTPAddress) | Out-String
# Adding pscustomobjets entries to array
$teams += [pscustomobject]@{
DisplayName = ($group).DisplayName
Name = ($group).Name
Alias = ($group).Alias
AccessType = ($group).AccessType
Classification=($group).classification
CreationApp=($group).resourceprovisioningoptions
Language = ($group).Language
Owner = ("$owner")
}
}
#out put in GridView (external window)
Write-Host "Display in Grid View Window " -ForegroundColor Green
$teams | Out-GridView -Title "All Office365 Groups created in MS Teams"
#out put in powershell
$teams | Export-Csv C:\tools\TeamsClassi.csv -NoTypeInformation
BR,
/HS
Apr 18 2020 06:28 PM
@Himanshu Singh, You can check for the PSsession status before you get the owners every iteration.
$PSSessionStatus = $(Get-PSSession -Name $Session.Name ).State
If($PSSessionStatus -eq Opened)
{
Run the code to obtain de owners
}
Else
{
#Create a new session and run the code to obtain the owners
}
As an alternative, you can create a counter that increments every time you iterate inside the loop and every N number of iterations you close and reopen the PSsession (Refreshing it).
Also to reduce loading times I will recommend only import the cmdlets that you are using.
Import-PSSession $Session -AllowClobber -Verbose -CommandName "Get-UnifiedGroupLinks"
Regards
Erick A. Moreno
Apr 19 2020 09:07 AM
I just found out this one
Use the Exchange Online PowerShell V2 module
https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/exchange-online-powershell-v2/e...
How the EXO V2 module works
The Exchange Online PowerShell V2 module contains a small set of new cmdlets that are optimized for bulk data retrieval scenarios (think: thousands and thousands of objects).
I will also try the suggestions you have mentioned,
could you please share how to add so that it continues to show progress status all through...
BR,
/HS
Apr 19 2020 12:18 PM
Hi,
I just finished using the Connect-ExchangeOnline - it only generates ~400 groups whereas i know i have more then 10K appears it is not showing the Archived ones may be,
I have MFA enabled i - storing creds in a variable doesnt help ??
BR,
/HS