75 lines
1.9 KiB
PowerShell
75 lines
1.9 KiB
PowerShell
$LogonEmail = Read-Host "Enter Logon Email"
|
|
Connect-ExchangeOnline -UserPrincipalName $LogonEmail
|
|
Connect-MgGraph -Scopes "Directory.Read.All"
|
|
|
|
class Group {
|
|
[string]$Name
|
|
[string]$DisplayName
|
|
[string]$Type
|
|
[Member[]]$Members
|
|
[string]$UserPrincipalName
|
|
[string]$MemberDisplayName
|
|
[string]$Mail
|
|
}
|
|
|
|
class Member {
|
|
[string]$UserPrincipalName
|
|
[string]$MemberDisplayName
|
|
[string]$Mail
|
|
}
|
|
|
|
$gs = Get-Group | Select-Object *
|
|
$Groups =
|
|
ForEach ($g in $gs){
|
|
$Group = [Group]::new()
|
|
$Group.Name = $g.Name
|
|
$Group.DisplayName = $g.DisplayName
|
|
$Group.Type = $g.GroupType
|
|
|
|
$ms = $g.Members
|
|
$Members =
|
|
ForEach ($m in $ms){
|
|
$User = Get-Mailbox -Identity $m | Select-Object *
|
|
if ($User.Length -eq 1){
|
|
$Member = [Member]::new()
|
|
$Member.UserPrincipalName = $User.UserPrincipalName
|
|
$Member.MemberDisplayName = $User.DisplayName
|
|
$Member.Mail = $User.WindowsEmailAddress
|
|
|
|
$Member
|
|
}
|
|
else {
|
|
ForEach ($u in $User){
|
|
$grs = Get-MgUserMemberOf -UserId $u.UserPrincipalName | Select-Object *
|
|
ForEach ($gr in $grs){
|
|
if ($gr.AdditionalProperties.displayName -eq $g.DisplayName){
|
|
$Member = [Member]::new()
|
|
$Member.UserPrincipalName = $u.UserPrincipalName
|
|
$Member.MemberDisplayName = $u.DisplayName
|
|
$Member.Mail = $u.WindowsEmailAddress
|
|
|
|
$Member
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$Group.Members = $Members
|
|
$Group
|
|
}
|
|
|
|
$Groups2 =
|
|
ForEach ($Group in $Groups){
|
|
$Group
|
|
$Group2 =
|
|
ForEach ($member in $Group.Members){$member}
|
|
$Group2 = $Group2 | Sort-Object -Property UserPrincipalName -Unique
|
|
$Group2
|
|
}
|
|
|
|
$Groups2 | ConvertTo-Csv | Out-File ".\GroupReport.csv"
|
|
|
|
Disconnect-MgGraph
|
|
Disconnect-ExchangeOnline
|