Jan 23 2023
06:17 AM
- last edited on
Feb 01 2023
11:42 AM
by
TechCommunityAP
Jan 23 2023
06:17 AM
- last edited on
Feb 01 2023
11:42 AM
by
TechCommunityAP
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
Jan 23 2023 08:01 AM
I'm sure we can harass @Tony Redmond to update the script to properly handle multiple owners. Say by removing the zero index out of $GroupData[0]/using a proper loop :)
Jan 23 2023 08:14 AM
SolutionJan 23 2023 08:25 AM
Jan 24 2023 07:06 AM
Jan 24 2023 09:24 AM
Yep, $GroupOwnerMail is what you need.
To get the entries on separate lines is more problematic. Here's what I did:
First, create an array of the owner names instead of a string (no join)
[array]$GroupOwnerEmail = $GroupData.Mail
Then, for the output to the list used to drive the CSV and HTML output, add these lines before the line is generated ( $ReportLine = [PSCustomObject][Ordered]@{ )
$OFS="`n`n"
$ContactEmails = $Null
If ($G.GroupContact -ne $Null) { [string]$ContactEmails = $($G.GroupContact) }
Finally, make sure that the formatted string with line breaks is output in the report
ContactEmail = $ContactEmails
This technique uses the fact that you can define the PowerShell out field separator https://devblogs.microsoft.com/powershell/psmdtagfaq-what-is-ofs/ to include a new line escape sequence. It worked for me but might not be what you need for Power BI. Try it.
Jan 25 2023 06:01 AM