Created
May 5, 2025 03:03
-
-
Save BiatuAutMiahn/bb1a2726cb278670da030a36c171e288 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#SplitMultiLine | |
function sml($l){$n=[Environment]::NewLine;if($l-match"`n"){return $l.Split($n,[StringSplitOptions]::RemoveEmptyEntries)}else{return $l};}; | |
# Write Progress | |
function prg($s,$c,$ci,$i){Write-Host "[$($i.ToString().PadLeft($ci))\$c ($([Math]::Round($i/$c*100,3).ToString().PadLeft(3))%)] $s"} | |
# Write Progress (NoNewLine) | |
function prgn($s,$c,$ci,$i){Write-Host "[$($i.ToString().PadLeft($ci))\$c ($([Math]::Round($i/$c*100,3).ToString().PadLeft(3))%)] $s" -NoNewLine} | |
# ModUserGroup | |
# | |
# Note: Must run from OnePrem AD. Do Connect-ExchangeOnline, and Connect-MgGraph | |
# -sGrp is the Group Name, can be AD Security Group, AD Distribution List, M365 Group, or an Exchange Online Distribution List | |
# -ua, A MultiLine string of UPNs to add. | |
# -ur, A MultiLine string of UPNs to remove. | |
# | |
# Depends on: sml, prg, prgn | |
# | |
# OneLiner: | |
# function mug($sGrp,$ua,$ur){$ogt=$null;$oGrp=Get-MgGroup -Filter "DisplayName eq '$sGrp' or Mail eq '$sGrp' or MailNickname eq '$sGrp'" -ErrorAction Stop;if($null-ne$oGrp){Write-Host "`nGroup Name: $sGrp";Write-Host "Detect group type..." -NoNewline;try{if($oGrp.OnPremisesSyncEnabled-eq$true){if($oGrp.MailEnabled-eq$true-and$oGrp.SecurityEnabled-ne$true){Write-Host "AD Distribution Group";$ogt=0}else{Write-Host "AD Security Group";$ogt=1}}else{if($oGrp.MailEnabled-eq$true-and$oGrp.SecurityEnabled-ne$true){Write-Host "Exchange Online Distribution List";$ogt=2}else{Write-Host "M365 Group";$ogt=3}}}catch{Write-Host "Failed: `n$($_.Exception.Message)";return}Write-Host "Getting group object..." -NoNewline;try{if($ogt-eq0){$oDL=Get-ADGroup -Filter "GroupCategory -eq 'Distribution' -and $(if($sGrp.Contains('@')){"Mail -eq '$sGrp'"}else{"Name -eq '$sGrp'"})" -Properties *}elseif($ogt-eq1){$oDL=Get-ADGroup -Filter "GroupCategory -eq 'Security' -and Name -eq '$($oGrp.DisplayName)'" -Properties *}elseif($ogt-eq2){$oDL=Get-DistributionGroup -Filter $(if($sGrp.Contains('@')){"PrimarySmtpAddress -eq '$sGrp'"}else{"DisplayName -eq '$sGrp'"})}elseif($ogt-eq3){$oDL=Get-MgGroup -Filter "displayName eq '$sGrp'"}Write-Host "Done"}catch{Write-Host "Failed: `n$($_.Exception.Message)";return}Write-Host "Gathing list of existing members..." -NoNewline;try{if($ogt-eq0-or$ogt-eq1){$gml=(Get-ADGroupMember -Identity $oDL|ForEach-Object{Get-ADUser -Filter "objectGUID -eq '$($_.objectGUID)'" -Properties *})}elseif($ogt-eq2){$gml=Get-DistributionGroupMember -Identity $oDL.Identity}elseif($ogt-eq3){$gml=Get-MgGroupMember -GroupId $oDL.Id -All|ForEach-Object{Get-MgUser -UserId $_.Id -Property 'UserPrincipalName'}}Write-Host "Done"}catch{Write-Host "Failed: `n$($_.Exception.Message)";return}$upns=(Get-ADForest).UPNSuffixes;if($ua){Write-Host "`n[Adding Members]";$aul=@();if($ogt-eq0){$aul=@(sml $ua|ForEach-Object{if($_.Contains('@')-and-Not($upns.Contains(($_-Split'@')[1]))){return $_}else{$u=Get-ADUser -Filter "userPrincipalName -eq '$_' -or targetAddress -eq '$_' -or Mail -eq '$_' -or EmailAddress -eq '$_'" -Properties *;if($null-eq$u){Write-Host "Not A User: `"$($_)`"."}else{return $u}}})}elseif($ogt-eq1){$aul=@(sml $ua|ForEach-Object{$u=Get-ADUser -Filter "userPrincipalName -eq '$_' -or targetAddress -eq '$_' -or Mail -eq '$_' -or EmailAddress -eq '$_'" -Properties *;if($null-eq$u){Write-Host "Not A User: `"$($_)`"."}else{return $u}})}elseif($ogt-eq2-or$ogt-eq3){$aul=@(sml $ua)}$c=$aul.Count;if($c-eq0){$c=1};$ci=$c.toString().Length;if($ci-eq0){$ci=1};$f=@();$i=0;ForEach($m in $aul){$i+=1;$gme=$false;$ms=$m;if($m.Contains('@')-and-Not($upns.Contains(($m-Split'@')[1]))){if($ogt-eq0){$cOU="OU=Contacts,$((Get-ADDomain).DistinguishedName)";$r=Get-ADObject -Filter "mail -eq '$m'" -ErrorAction SilentlyContinue -Properties *;if($r){if($oDL.members.Contains($r.DistinguishedName)){prg "Already a contact: `"$($m)`"" $c $ci $i;continue}}prgn "Adding as contact `"$($m)`"..." $c $ci $i;try{if(!$r){$r=New-ADObject -Name $m -Type "contact" -OtherAttributes @{mail=$m;targetAddress="SMTP:$m"} -Path $cOU -ErrorAction Stop -PassThru}Set-ADGroup -Identity $oDL -Add @{'member'=$r.distinguishedName} -ErrorAction Stop -Confirm:$false;Write-Host "Done";continue}catch{$f+=$m;Write-Host "Failed, Exception: `n$($_.Exception.Message)";continue}}elseif($ogt-eq2){if ($gml|Where-Object{($_.EmailAddresses|ForEach-Object{$_.ToString().ToLower()})-Contains("smtp:$m".ToLower())}){prg "Already a Contact: `"$m`"" $c $ci $i;continue}prgn "Adding as Contact `"$m`"..." $c $ci $i;try {$r=Get-Recipient -Identity $m -ErrorAction SilentlyContinue;if(!$r){$alias=($m.Split('@')[0]-replace'[^A-Za-z0-9]','').Substring(0,64);$baseAlias=$alias;$suffix=0;while(Get-Recipient -Filter "Alias -eq '$alias'" -ErrorAction SilentlyContinue){$suffix++;$alias="$baseAlias$suffix"}$r=New-MailContact -Name $m -ExternalEmailAddress $m -Alias $alias -DisplayName $m -Confirm:$false -ErrorAction Stop}Add-DistributionGroupMember -Identity $oDL.Identity -Member $r.Guid -Confirm:$false -ErrorAction Stop;Write-Host "Done";continue}catch{$f+=$m;Write-Host "Failed, Exception: `n$($_.Exception.Message)";continue}}else{prg "Skipping Contact `"$($m)`"" $c $ci $i;continue}}if($ogt-eq0-or$ogt-eq1){$ms=$m.UserPrincipalName;if($gml|Where-Object{($(if($_.proxyAddresses){$_.proxyAddresses|ForEach-Object{$_.ToString().ToLower()}})-contains(("smtp:"+$m.userPrincipalName).ToLower()))-or($_.userPrincipalName -match $m.userPrincipalName)-or($_.SamAccountName -match $m.SamAccountName)}){$gme=$true}}elseif($ogt-eq2){if($gml|Where-Object{($_.EmailAddresses|ForEach-Object{$_.ToString().ToLower()})-contains(("smtp:"+$m).ToLower())-or($_.WindowsLiveId.ToLower()-eq$m.ToLower())}){$gme=$true}}elseif($ogt-eq3){if($gml|Where-Object{($_.userPrincipalName.ToString().ToLower())-contains($m.ToLower())}){$gme=$true}}if($gme){prg "Already a member: `"$($ms)`"" $c $ci $i;continue}prgn "Adding `"$($ms)`"..." $c $ci $itry {if($ogt-eq0-or$ogt-eq1){Add-ADGroupMember -Identity $oDL -Members $m.distinguishedName -ErrorAction Stop -Confirm:$false;Write-Host "Done"}elseif($ogt-eq2){try{Add-DistributionGroupMember -Identity $oDL -Member $m -ErrorAction Stop -Confirm:$false;Write-Host "Done"}catch{$r=Get-Recipient -Identity $m -ErrorAction SilentlyContinue;if($r.Count-gt1){$g=($r|Where-Object{$_.RecipientType -eq 'MailContact'}).Guid;if($dlm|Where-Object{($_.Guid)-contains($g)}){prg "Already a member: `"$($ms)`"" $c $ci $i;continue}else{try{Add-DistributionGroupMember -Identity $oDL.Identity -Member $g -ErrorAction Stop -Confirm:$false;Write-Host "Done";continue}catch{$f+=$m;Write-Host "Failed: Exception:`n$($_.Exception.Message)";continue}}}else{$f+=$m;Write-Host "Failed: Exception:`n$($_.Exception.Message)";continue}}}elseif($ogt-eq3){$user=Get-MgUser -Filter "userPrincipalName eq '$m'";New-MgGroupMember -GroupId $oDL.Id -DirectoryObjectId $user.Id -ErrorAction Stop -Confirm:$false;Write-Host "Done"}}catch{$f+=$m;Write-Host "Failed: `n$($_.Exception.Message)"}}if($f.Count){Write-Host "`n`n[Failed Adding Members]";$f|Format-Table;Write-Host `n}}if($ur){Write-Host "`n[Removing Members]";$rul=@();if($ogt-eq0){$rul=@(sml $ur|ForEach-Object{if($_.Contains('@')-and-Not($upns.Contains(($_-Split'@')[1]))){return $_}else{$u=Get-ADUser -Filter "userPrincipalName -eq '$_' -or targetAddress -eq '$_' -or Mail -eq '$_' -or EmailAddress -eq '$_'" -Properties *;if($null-eq$u){Write-Host "Not A User: `"$($_)`"."}else{return $u}}})}elseif($ogt-eq1){$rul=@(sml $ur|ForEach-Object{$u=Get-ADUser -Filter "userPrincipalName -eq '$_' -or targetAddress -eq '$_' -or Mail -eq '$_' -or EmailAddress -eq '$_'" -Properties *;if($null-eq$u){Write-Host "Not A User: `"$($_)`"."}else{return $u}})}elseif($ogt-eq2-or$ogt-eq3){$rul=@(sml $ur)}$c=$rul.Count;if($c-eq0){$c=1};$ci=$c.toString().Length;if($ci-eq0){$ci=1};$f=@();$i=0;ForEach($m in $rul){$i+=1;$gme=$false;$ms=$m;if($m.Contains('@')-and-Not($upns.Contains(($m-Split'@')[1]))){if($ogt-eq1-or$ogt-eq3){prg "Skipped contact `"$($ms)`"" $c $ci $i;continue}elseif($ogt-eq0){$r=Get-ADObject -Filter "mail -eq '$m'" -ErrorAction SilentlyContinue -Properties *;$ms=$r.Name;if(!(Get-ADObject -Filter "mail -eq '$m'" -ErrorAction SilentlyContinue -Properties *)){prg "Not a contact: `"$($ms)`"" $c $ci $i;continue}if(!$oDL.members.Contains($r.DistinguishedName)){prg "Not a member: `"$($ms)`"" $c $ci $i;continue}prgn "Removing contact `"$($ms)`"..." $c $ci $i;try{Remove-ADGroupMember -Identity $oDL -Members $r -ErrorAction Stop -Confirm:$false;Write-Host "Done"}catch{try{$cOU=$oDL.member|Where-Object{$_-like"*CN=$($m.Split('@')[0])*"}if(!$cOU){prg "Not a contact: `"$($ms)`"" $c $ci $i;continue}Set-ADGroup -Identity $oDL -Remove @{member=$cOU} -ErrorAction Stop;Write-Host "Done";continue}catch{$f+=$m;Write-Host "Failed, Exception: `n$($_.Exception.Message)";continue;}$f+=$m;Write-Host "Failed, Exception: `n$($_.Exception.Message)";continue}}elseif($ogt-eq2){$r=Get-Recipient -Identity $m -ErrorAction SilentlyContinue;$ms=$r.DisplayName;if (!$r){prg "Not a contact: `"$($ms)`"" $c $ci $i;continue}if(!($gml|Where-Object{($_.EmailAddresses|ForEach-Object{$_.ToString().ToLower()})-Contains("smtp:$m".ToLower())})){prg "Not a Member: `"$ms`"" $c $ci $i;continue}prgn "Removing Contact `"$ms`"..." $c $ci $i;try{Remove-DistributionGroupMember -Identity $oDL -Member $m -ErrorAction Stop -Confirm:$false;Write-Host "Done";continue}catch{$f+=$m;Write-Host "Failed, Exception: `n$($_.Exception.Message)";continue}}}if($ogt-eq0){$ms=$m.UserPrincipalName;if($gml|Where-Object{($(if($_.proxyAddresses){$_.proxyAddresses|ForEach-Object{$_.ToString().ToLower()}})-contains(("smtp:"+$m.userPrincipalName).ToLower()))-or($_.userPrincipalName -match $m.userPrincipalName)-or($_.SamAccountName -match $m.SamAccountName)}){$gme=$true}}elseif($ogt-eq1){$ms=$m.UserPrincipalName;if($gml|Where-Object{($(if($_.proxyAddresses){$_.proxyAddresses|ForEach-Object{$_.ToString().ToLower()}})-contains(("smtp:"+$m.userPrincipalName).ToLower()))-or($_.userPrincipalName -match $m.userPrincipalName)-or($_.SamAccountName -match $m.SamAccountName)}){$gme=$true}}elseif($ogt-eq2){if($gml|Where-Object{($_.EmailAddresses|ForEach-Object{$_.ToString().ToLower()})-contains(("smtp:"+$m).ToLower())-or($_.WindowsLiveId.ToLower()-eq$m.ToLower())}){$gme=$true}}elseif($ogt-eq3){if($gml|Where-Object{($_.userPrincipalName.ToString().ToLower())-contains($m.ToLower())}){$gme=$true}}if(!$gme){prg "Not a member: `"$($ms)`"" $c $ci $i;continue}prgn "Removing `"$($ms)`"..." $c $ci $i;try{if($ogt-eq0-or$ogt-eq1){Remove-ADGroupMember -Identity $oDL -Members $m.distinguishedName -ErrorAction Stop -Confirm:$false;Write-Host "Done"}elseif($ogt-eq2){Remove-DistributionGroupMember -Identity $oDL -Member $m -ErrorAction Stop -Confirm:$false;Write-Host "Done"}elseif($ogt-eq3){$user=Get-MgUser -Filter "userPrincipalName eq '$m'";Remove-MgGroupMemberByRef -GroupId $oDL.Id -DirectoryObjectId $user.Id -ErrorAction Stop -Confirm:$false;write-host "Done"}}catch{$f+=$m;Write-Host "Failed: `n$($_.Exception.Message)"}}if($f.Count){Write-Host "`n`n[Failed Removing Members]";$f|Format-Table;Write-Host `n}}}} | |
# Expanded: | |
function mug($sGrp,$ua,$ur){ | |
$ogt=$null | |
$oGrp=Get-MgGroup -Filter "DisplayName eq '$sGrp' or Mail eq '$sGrp' or MailNickname eq '$sGrp'" -ErrorAction Stop | |
if($null-ne$oGrp){ | |
Write-Host "`nGroup Name: $sGrp" | |
Write-Host "Detect group type..." -NoNewline | |
try{ | |
if($oGrp.OnPremisesSyncEnabled-eq$true){ | |
if($oGrp.MailEnabled-eq$true-and$oGrp.SecurityEnabled-ne$true){ | |
Write-Host "AD Distribution Group" | |
$ogt=0 | |
}else{ | |
Write-Host "AD Security Group" | |
$ogt=1 | |
} | |
}else{ | |
if($oGrp.MailEnabled-eq$true-and$oGrp.SecurityEnabled-ne$true){ | |
Write-Host "Exchange Online Distribution List" | |
$ogt=2 | |
}else{ | |
Write-Host "M365 Group" | |
$ogt=3 | |
} | |
} | |
} catch { | |
Write-Host "Failed: `n$($_.Exception.Message)" | |
return; | |
} | |
Write-Host "Getting group object..." -NoNewline | |
try { | |
if($ogt-eq0){ | |
$oDL=Get-ADGroup -Filter "GroupCategory -eq 'Distribution' -and $(if($sGrp.Contains('@')){"Mail -eq '$sGrp'"}else{"Name -eq '$sGrp'"})" -Properties *; | |
}elseif($ogt-eq1){ | |
$oDL=Get-ADGroup -Filter "GroupCategory -eq 'Security' -and Name -eq '$($oGrp.DisplayName)'" -Properties *; | |
}elseif($ogt-eq2){ | |
$oDL=Get-DistributionGroup -Filter $(if($sGrp.Contains('@')){"PrimarySmtpAddress -eq '$sGrp'"}else{"DisplayName -eq '$sGrp'"}) | |
}elseif($ogt-eq3){ | |
$oDL=Get-MgGroup -Filter "displayName eq '$sGrp'" | |
} | |
Write-Host "Done" | |
} catch { | |
Write-Host "Failed: `n$($_.Exception.Message)" | |
return; | |
} | |
Write-Host "Gathing list of existing members..." -NoNewline | |
try { | |
if($ogt-eq0-or$ogt-eq1){ | |
$gml=(Get-ADGroupMember -Identity $oDL|ForEach-Object{Get-ADUser -Filter "objectGUID -eq '$($_.objectGUID)'" -Properties *}); | |
}elseif($ogt-eq2){ | |
$gml=Get-DistributionGroupMember -Identity $oDL.Identity; | |
}elseif($ogt-eq3){ | |
$gml=Get-MgGroupMember -GroupId $oDL.Id -All|ForEach-Object{Get-MgUser -UserId $_.Id -Property 'UserPrincipalName'} | |
} | |
Write-Host "Done" | |
} catch { | |
Write-Host "Failed: `n$($_.Exception.Message)" | |
return; | |
} | |
$upns=(Get-ADForest).UPNSuffixes | |
if($ua){ | |
Write-Host "`n[Adding Members]"; | |
$aul=@() | |
if($ogt-eq0){ | |
$aul=@(sml $ua|ForEach-Object{if($_.Contains('@')-and-Not($upns.Contains(($_-Split'@')[1]))){return $_}else{$u=Get-ADUser -Filter "userPrincipalName -eq '$_' -or targetAddress -eq '$_' -or Mail -eq '$_' -or EmailAddress -eq '$_'" -Properties *;if($null-eq$u){Write-Host "Not A User: `"$($_)`"."}else{return $u}}}) | |
}elseif($ogt-eq1){ | |
$aul=@(sml $ua|ForEach-Object{$u=Get-ADUser -Filter "userPrincipalName -eq '$_' -or targetAddress -eq '$_' -or Mail -eq '$_' -or EmailAddress -eq '$_'" -Properties *;if($null-eq$u){Write-Host "Not A User: `"$($_)`"."}else{return $u}}) | |
}elseif($ogt-eq2-or$ogt-eq3){ | |
$aul=@(sml $ua) | |
} | |
$c=$aul.Count; | |
if($c-eq0){$c=1} | |
$ci=$c.toString().Length | |
if($ci-eq0){$ci=1} | |
$f=@(); | |
$i=0; | |
ForEach($m in $aul){ | |
$i+=1; | |
$gme=$false | |
$ms=$m | |
if($m.Contains('@')-and-Not($upns.Contains(($m-Split'@')[1]))){ | |
if($ogt-eq0){ | |
$cOU="OU=Contacts,$((Get-ADDomain).DistinguishedName)" | |
$r=Get-ADObject -Filter "mail -eq '$m'" -ErrorAction SilentlyContinue -Properties * | |
if($r){ | |
if($oDL.members.Contains($r.DistinguishedName)){ | |
prg "Already a contact: `"$($m)`"" $c $ci $i | |
continue; | |
} | |
} | |
prgn "Adding as contact `"$($m)`"..." $c $ci $i | |
try{ | |
if(!$r){ | |
$r=New-ADObject -Name $m -Type "contact" -OtherAttributes @{mail=$m;targetAddress="SMTP:$m"} -Path $cOU -ErrorAction Stop -PassThru | |
} | |
Set-ADGroup -Identity $oDL -Add @{'member'=$r.distinguishedName} -ErrorAction Stop -Confirm:$false; | |
Write-Host "Done" | |
continue; | |
}catch{ | |
$f+=$m; | |
Write-Host "Failed, Exception: `n$($_.Exception.Message)" | |
continue; | |
} | |
}elseif($ogt-eq2){ | |
if ($gml|Where-Object{($_.EmailAddresses|ForEach-Object{$_.ToString().ToLower()})-Contains("smtp:$m".ToLower())}){ | |
prg "Already a Contact: `"$m`"" $c $ci $i | |
continue | |
} | |
prgn "Adding as Contact `"$m`"..." $c $ci $i | |
try { | |
$r=Get-Recipient -Identity $m -ErrorAction SilentlyContinue; | |
if (!$r) { | |
$alias=($m.Split('@')[0]-replace'[^A-Za-z0-9]','').Substring(0,64) | |
$baseAlias=$alias | |
$suffix=0 | |
while(Get-Recipient -Filter "Alias -eq '$alias'" -ErrorAction SilentlyContinue){ | |
$suffix++ | |
$alias="$baseAlias$suffix" | |
} | |
$r=New-MailContact -Name $m -ExternalEmailAddress $m -Alias $alias -DisplayName $m -Confirm:$false -ErrorAction Stop | |
} | |
Add-DistributionGroupMember -Identity $oDL.Identity -Member $r.Guid -Confirm:$false -ErrorAction Stop | |
Write-Host "Done" | |
continue | |
}catch{ | |
$f+=$m | |
Write-Host "Failed, Exception: `n$($_.Exception.Message)" | |
continue | |
} | |
}else{ | |
prg "Skipping Contact `"$($m)`"" $c $ci $i | |
continue; | |
} | |
} | |
if($ogt-eq0-or$ogt-eq1){ | |
$ms=$m.UserPrincipalName | |
if($gml|Where-Object{($(if($_.proxyAddresses){$_.proxyAddresses|ForEach-Object{$_.ToString().ToLower()}})-contains(("smtp:"+$m.userPrincipalName).ToLower()))-or($_.userPrincipalName -match $m.userPrincipalName)-or($_.SamAccountName -match $m.SamAccountName)}){ | |
$gme=$true | |
} | |
}elseif($ogt-eq2){ | |
if($gml|Where-Object{($_.EmailAddresses|ForEach-Object{$_.ToString().ToLower()})-contains(("smtp:"+$m).ToLower())-or($_.WindowsLiveId.ToLower()-eq$m.ToLower())}){ | |
$gme=$true | |
} | |
}elseif($ogt-eq3){ | |
if($gml|Where-Object{($_.userPrincipalName.ToString().ToLower())-contains($m.ToLower())}){ | |
$gme=$true | |
} | |
} | |
if($gme){ | |
prg "Already a member: `"$($ms)`"" $c $ci $i | |
continue | |
} | |
prgn "Adding `"$($ms)`"..." $c $ci $i | |
try { | |
if($ogt-eq0-or$ogt-eq1){ | |
Add-ADGroupMember -Identity $oDL -Members $m.distinguishedName -ErrorAction Stop -Confirm:$false; | |
Write-Host "Done" | |
}elseif($ogt-eq2){ | |
try{ | |
Add-DistributionGroupMember -Identity $oDL -Member $m -ErrorAction Stop -Confirm:$false; | |
Write-Host "Done" | |
}catch{ | |
$r=Get-Recipient -Identity $m -ErrorAction SilentlyContinue; | |
if($r.Count-gt1){ | |
$g=($r|Where-Object{$_.RecipientType -eq 'MailContact'}).Guid; | |
if($dlm|Where-Object{($_.Guid)-contains($g)}){ | |
prg "Already a member: `"$($ms)`"" $c $ci $i | |
continue | |
}else{ | |
try{ | |
Add-DistributionGroupMember -Identity $oDL.Identity -Member $g -ErrorAction Stop -Confirm:$false | |
Write-Host "Done" | |
continue | |
}catch{ | |
$f+=$m; | |
Write-Host "Failed: Exception:`n$($_.Exception.Message)" | |
continue | |
} | |
} | |
}else{ | |
$f+=$m; | |
Write-Host "Failed: Exception:`n$($_.Exception.Message)" | |
continue | |
} | |
} | |
}elseif($ogt-eq3){ | |
$user=Get-MgUser -Filter "userPrincipalName eq '$m'" | |
New-MgGroupMember -GroupId $oDL.Id -DirectoryObjectId $user.Id -ErrorAction Stop -Confirm:$false; | |
Write-Host "Done" | |
} | |
}catch{ | |
$f+=$m; | |
Write-Host "Failed: `n$($_.Exception.Message)" | |
} | |
} | |
if($f.Count){Write-Host "`n`n[Failed Adding Members]";$f|Format-Table;Write-Host `n} | |
} | |
if($ur){ | |
Write-Host "`n[Removing Members]"; | |
$rul=@() | |
if($ogt-eq0){ | |
$rul=@(sml $ur|ForEach-Object{if($_.Contains('@')-and-Not($upns.Contains(($_-Split'@')[1]))){return $_}else{$u=Get-ADUser -Filter "userPrincipalName -eq '$_' -or targetAddress -eq '$_' -or Mail -eq '$_' -or EmailAddress -eq '$_'" -Properties *;if($null-eq$u){Write-Host "Not A User: `"$($_)`"."}else{return $u}}}) | |
}elseif($ogt-eq1){ | |
$rul=@(sml $ur|ForEach-Object{$u=Get-ADUser -Filter "userPrincipalName -eq '$_' -or targetAddress -eq '$_' -or Mail -eq '$_' -or EmailAddress -eq '$_'" -Properties *;if($null-eq$u){Write-Host "Not A User: `"$($_)`"."}else{return $u}}) | |
}elseif($ogt-eq2-or$ogt-eq3){ | |
$rul=@(sml $ur) | |
} | |
$c=$rul.Count; | |
if($c-eq0){$c=1} | |
$ci=$c.toString().Length | |
if($ci-eq0){$ci=1} | |
$f=@(); | |
$i=0; | |
ForEach($m in $rul){ | |
$i+=1; | |
$gme=$false | |
$ms=$m | |
if($m.Contains('@')-and-Not($upns.Contains(($m-Split'@')[1]))){ | |
if($ogt-eq1-or$ogt-eq3){ | |
prg "Skipped contact `"$($ms)`"" $c $ci $i | |
continue; | |
}elseif($ogt-eq0){ | |
$r=Get-ADObject -Filter "mail -eq '$m'" -ErrorAction SilentlyContinue -Properties * | |
$ms=$r.Name | |
if(!(Get-ADObject -Filter "mail -eq '$m'" -ErrorAction SilentlyContinue -Properties *)){ | |
prg "Not a contact: `"$($ms)`"" $c $ci $i | |
continue | |
} | |
if(!$oDL.members.Contains($r.DistinguishedName)){ | |
prg "Not a member: `"$($ms)`"" $c $ci $i | |
continue; | |
} | |
prgn "Removing contact `"$($ms)`"..." $c $ci $i | |
try{ | |
Remove-ADGroupMember -Identity $oDL -Members $r -ErrorAction Stop -Confirm:$false; | |
Write-Host "Done" | |
}catch{ | |
try{ | |
$cOU=$oDL.member|Where-Object{$_-like"*CN=$($m.Split('@')[0])*"} | |
if(!$cOU){ | |
prg "Not a contact: `"$($ms)`"" $c $ci $i | |
continue | |
} | |
Set-ADGroup -Identity $oDL -Remove @{member=$cOU} -ErrorAction Stop | |
Write-Host "Done" | |
continue; | |
}catch{ | |
$f+=$m; | |
Write-Host "Failed, Exception: `n$($_.Exception.Message)" | |
continue; | |
} | |
$f+=$m; | |
Write-Host "Failed, Exception: `n$($_.Exception.Message)" | |
continue; | |
} | |
}elseif($ogt-eq2){ | |
$r=Get-Recipient -Identity $m -ErrorAction SilentlyContinue | |
$ms=$r.DisplayName | |
if (!$r){ | |
prg "Not a contact: `"$($ms)`"" $c $ci $i | |
continue | |
} | |
if (!($gml|Where-Object{($_.EmailAddresses|ForEach-Object{$_.ToString().ToLower()})-Contains("smtp:$m".ToLower())})){ | |
prg "Not a Member: `"$ms`"" $c $ci $i | |
continue | |
} | |
prgn "Removing Contact `"$ms`"..." $c $ci $i | |
try { | |
Remove-DistributionGroupMember -Identity $oDL -Member $m -ErrorAction Stop -Confirm:$false; | |
write-host "Done" | |
continue | |
}catch{ | |
$f+=$m | |
Write-Host "Failed, Exception: `n$($_.Exception.Message)" | |
continue | |
} | |
} | |
} | |
if($ogt-eq0){ | |
$ms=$m.UserPrincipalName | |
if($gml|Where-Object{($(if($_.proxyAddresses){$_.proxyAddresses|ForEach-Object{$_.ToString().ToLower()}})-contains(("smtp:"+$m.userPrincipalName).ToLower()))-or($_.userPrincipalName -match $m.userPrincipalName)-or($_.SamAccountName -match $m.SamAccountName)}){ | |
$gme=$true | |
} | |
}elseif($ogt-eq1){ | |
$ms=$m.UserPrincipalName | |
if($gml|Where-Object{($(if($_.proxyAddresses){$_.proxyAddresses|ForEach-Object{$_.ToString().ToLower()}})-contains(("smtp:"+$m.userPrincipalName).ToLower()))-or($_.userPrincipalName -match $m.userPrincipalName)-or($_.SamAccountName -match $m.SamAccountName)}){ | |
$gme=$true | |
} | |
}elseif($ogt-eq2){ | |
if($gml|Where-Object{($_.EmailAddresses|ForEach-Object{$_.ToString().ToLower()})-contains(("smtp:"+$m).ToLower())-or($_.WindowsLiveId.ToLower()-eq$m.ToLower())}){ | |
$gme=$true | |
} | |
}elseif($ogt-eq3){ | |
if($gml|Where-Object{($_.userPrincipalName.ToString().ToLower())-contains($m.ToLower())}){ | |
$gme=$true | |
} | |
} | |
if(!$gme){ | |
prg "Not a member: `"$($ms)`"" $c $ci $i | |
continue | |
} | |
prgn "Removing `"$($ms)`"..." $c $ci $i | |
try { | |
if($ogt-eq0-or$ogt-eq1){ | |
Remove-ADGroupMember -Identity $oDL -Members $m.distinguishedName -ErrorAction Stop -Confirm:$false; | |
Write-Host "Done" | |
}elseif($ogt-eq2){ | |
Remove-DistributionGroupMember -Identity $oDL -Member $m -ErrorAction Stop -Confirm:$false; | |
Write-Host "Done" | |
}elseif($ogt-eq3){ | |
$user=Get-MgUser -Filter "userPrincipalName eq '$m'" | |
Remove-MgGroupMemberByRef -GroupId $oDL.Id -DirectoryObjectId $user.Id -ErrorAction Stop -Confirm:$false; | |
write-host "Done" | |
} | |
}catch{ | |
$f+=$m; | |
Write-Host "Failed: `n$($_.Exception.Message)" | |
} | |
} | |
if($f.Count){Write-Host "`n`n[Failed Removing Members]";$f|Format-Table;Write-Host `n} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment