-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ExportOwnerlessGroupMemberDetails.ps1
79 lines (60 loc) · 3.75 KB
/
ExportOwnerlessGroupMemberDetails.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<#
Export Microsoft 365 Ownerless Groups Members
Version: v1.0
Date: 09/05/2023
Author: Rob Watts - Senior Cloud Solution Architect - Microsoft
DISCLAIMER
THIS CODE IS SAMPLE CODE. THESE SAMPLES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND.
MICROSOFT FURTHER DISCLAIMS ALL IMPLIED WARRANTIES INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES
OF MERCHANTABILITY OR OF FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK ARISING OUT OF THE USE OR
PERFORMANCE OF THE SAMPLES REMAINS WITH YOU. IN NO EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR
ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR
INABILITY TO USE THE SAMPLES, EVEN IF MICROSOFT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
BECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR
INCIDENTAL DAMAGES, THE ABOVE LIMITATION MAY NOT APPLY TO YOU.
#>
# Pop out disclaimer
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[Windows.Forms.MessageBox]::Show("
THIS CODE IS SAMPLE CODE.
THESE SAMPLES ARE PROVIDED 'AS IS' WITHOUT WARRANTY OF ANY KIND.
MICROSOFT FURTHER DISCLAIMS ALL IMPLIED WARRANTIES INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR OF FITNESS FOR A PARTICULAR PURPOSE.
THE ENTIRE RISK ARISING OUT OF THE USE OR PERFORMANCE OF THE SAMPLES REMAINS WITH YOU.
IN NO EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SAMPLES, EVEN IF MICROSOFT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
BECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE LIMITATION MAY NOT APPLY TO YOU.", "***DISCLAIMER***", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)
# Get Date information
#$Date = $(Get-Date).ToString("yyyy-MM-dd")
#Import Exchange Online Module
Import-Module ExchangeOnlineManagement
Write-Host "Importing Exchange Online PowerShell Module..."
# Connects to Exchange Online
Write-Host "Connecting to Exchange Online... Look out for the pop out window."
Connect-ExchangeOnline
# Enable File Saver
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
# File Saver (Set File Path - Open File Browser)
Write-Host "Please select the save location."
$SaveChooser = New-Object -Typename System.Windows.Forms.SaveFileDialog
$SaveChooser.initialDirectory = $initialDirectory
$SaveChooser.filter = "All files (*.csv)| *.csv"
$SaveChooser.ShowDialog() | Out-Null
$SaveFile = $SaveChooser.filename
# Gets all ownerless groups in the tenant, saves the Group Name and Group Primary SMTP address for later
Get-UnifiedGroup | Where-Object {-Not $_.ManagedBy} | foreach-Object {
$GroupName=$_.DisplayName
$GroupPrimarySMTP=$_.PrimarySmtpAddress
#For Each Group, it gets each member and saves user data (Name and UPN) to export
Get-UnifiedGroupLinks -Identity $GroupPrimarySMTP -LinkType Member | ForEach-Object {
$Row = "" | Select-Object GroupName,GroupPrimarySMTP,UserUPN,UserName
$row.GroupName=$GroupName
$row.GroupPrimarySMTP=$GroupPrimarySMTP
$Row.UserName=$_.DisplayName
$Row.UserUPN=$_.WindowsLiveID
$data =@($data)
$data += $row
}
}
#Collates all data and saves in a CSV file.
$data | Export-CSV "$SaveFile" -NoTypeInformation -ErrorAction SilentlyContinue
Write-Host "Done. Your export is saved to $SaveFile."