Skip to content

Instantly share code, notes, and snippets.

@BiatuAutMiahn
Created May 5, 2025 03:03
Show Gist options
  • Save BiatuAutMiahn/bb1a2726cb278670da030a36c171e288 to your computer and use it in GitHub Desktop.
Save BiatuAutMiahn/bb1a2726cb278670da030a36c171e288 to your computer and use it in GitHub Desktop.
#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