Created
January 10, 2023 19:47
-
-
Save barnettjw/4a72836a1be105158e4f4d7588d7d790 to your computer and use it in GitHub Desktop.
Migrate Distro List Members
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
function Format-Name(){ | |
param($name) | |
$array = $name -split ' ' | |
[pscustomobject]@{ | |
FirstName = $array[0].t | |
LastName = $array[1] | |
DisplayName = "$($array[1]), $($array[0])" | |
} | |
} | |
function Find-User(){ | |
param($email) | |
Get-ADObject -Filter {mail -eq $email} -Properties Displayname, mail, ExtensionAttribute14 | | |
select Displayname, Mail, ExtensionAttribute14 | |
} | |
function Compare-Users(){ | |
param($group, $members) | |
$referenceObject = $($members | ForEach-Object { Format-Name $_ }).displayname | |
$differenceObject = $(Get-DistributionGroupMember $group).displayname | |
$diff = Compare-Object -ReferenceObject $referenceObject -DifferenceObject $differenceObject -SyncWindow ($referenceObject.length / 2) | |
if($diff -ne $null) { | |
Write-Warning "$group`: $(($diff | measure).count) differences" | |
$diff | ft | |
} | |
else { Write-Warning "$group`: No Diff" } | |
} | |
#region - add users to groups | |
$unresolvedUsers = @() | |
$distros | ForEach-Object { | |
$group = $_."Distro Email" | |
if($_.'Member List'.trim() -ne ''){ | |
# get users to add to group | |
$members = $_.'Member List' -split ';' | |
# attempt to resolve a name to an email address | |
$resolvedUsers = @() | |
$members | ForEach-Object { | |
$user = Find-User -email $_ | |
$count = $($user | Measure-Object).Count | |
if($count -ne 1) { | |
$unresolvedUsers += [pscustomobject]@{ name = $_; group = $group } | |
} | |
else { $resolvedUsers += $user.mail } | |
} | |
# add emails to group | |
$resolvedUsers | ForEach-Object { | |
try { Add-DistributionGroupMember -Identity $group -Member $_ -ErrorAction stop } | |
catch { Write-Warning $_ } | |
} | |
} | |
} | |
#endregion |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment