Forum Discussion
Export all owners email adress for all Office 365 groups
Hi!
I have a script that exports all owners e-mail address for each Office 365 group to a csv file. The format of the csv file looks like below, one combination of Group and Owner on each row.
Group 1;email address removed for privacy reasons
Group 1;email address removed for privacy reasons
Group 1;email address removed for privacy reasons
Group 2;email address removed for privacy reasons
…
…
The script looks like this:
$PSScriptRoot
$groups = Get-UnifiedGroup -ResultSize Unlimited | Sort-Object DisplayName
$obj = @()
foreach($group in $groups)
{
foreach($ManagedByDetails in $group.ManagedByDetails)
{
$ret = "" | select UnifiedGroup,ManagedByDetails,Alias
$ret.UnifiedGroup = $group.DisplayName
$ret.Alias = $group.Alias
$ret.ManagedByDetails = $ManagedByDetails | Get-Recipient | select -ExpandProperty PrimarySMTPAddress
$ret
$obj += $ret
}
}
$obj | Export-Csv $PSScriptRoot\Exporter\Office365GroupOwners.csv -NoTypeInformation -Encoding utf8
The script is working fine, but with over 6000 groups in the organization it now takes a long time to run, and it often stops. I have done some research on Internet and understand that it would be much faster to run a script against the Graph API. I have tested Tony Redmonds script, https://github.com/12Knocksinna/Office365itpros/blob/master/TeamsGroupsActivityReportV5.PS1, and it works fine but it doesn’t give me the email address of all owners, just one for each group/team. I have tried to see if I could re-use some parts of Tonys script and extract all owners email addresses, but I’m not that skilled in scripting :-(.
So, I’m wondering if someone has a Graph-based script that exports the email address of each owner like my original script? Or any other suggestion to extract the same information.
Thanks!
/Henrik
- My logic for only outputting one contact email address for an owner is that this is what I was asked to do by someone who explicitly requested the addition of this data...
Anyway, replace:
$GroupOwnerEmail = $GroupData[0].Mail }
with
$GroupUserMail = $GroupData.Mail -Join ", "
and you'll get the email addresses of all the owners.
BTW, the script is now at version 5.10, updated today to fix some annoying bugs introduced by Microsoft in the Get-ExoMailboxFolderStatistics cmdlet
I'm sure we can harass TonyRedmond to update the script to properly handle multiple owners. Say by removing the zero index out of $GroupData[0]/using a proper loop 🙂
- My logic for only outputting one contact email address for an owner is that this is what I was asked to do by someone who explicitly requested the addition of this data...
Anyway, replace:
$GroupOwnerEmail = $GroupData[0].Mail }
with
$GroupUserMail = $GroupData.Mail -Join ", "
and you'll get the email addresses of all the owners.
BTW, the script is now at version 5.10, updated today to fix some annoying bugs introduced by Microsoft in the Get-ExoMailboxFolderStatistics cmdlet- HenrikAdolfssonCopper ContributorThanks Tony!
At first it didn't work, but when I changed it to
$GroupOwnerEmail = $GroupData.Mail -Join ", " }
it gave all owners email addresses. I guess that you meant $GroupOwnerEmail and not
$GroupUserMail, or?
It ran very fast and gave me the information that I need, but since all addresses are on the same line, I’m note able to import it to my Power BI report like I normally do. Do you know a way to get the group name/alias and just one owner on each row?
Regards,
Henrik
- I also updated the Microsoft Graph PowerShell SDK version of the group membership report described in https://office365itpros.com/2023/01/19/microsoft-365-groups-report-v2/ to output the email addresses of group owners. That script is probably closer to what you're looking for.