Sync a text file to an Exchange distribution group

Just a quick one for this bank holiday morning.

Here’s a little bit of code that you can use to synchronise a text file with a list of recipient primary email addresses to a distribution group. A good use for it would be where you have exports from an application system to determine mailing lists that the users should be a member of, and want to keep the two in sync.

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
$File=Get-Content ".\testdg.txt"
$DG="testdg"
[array]$DGmembers=Get-DistributionGroupMember $DG
# Remove users who aren't in this group
if ($DGmembers.Count)
{
    foreach ($i in $DGmembers)
    {
        if ($File -notcontains $i.PrimarySMTPAddress)
        {
            Write-Host "Removing $($i.PrimarySMTPAddress) from $($DG)"
            Remove-DistributionGroupMember $DG -Member $i.PrimarySMTPAddress -Confirm:$false
        }
    }
}
# Add new members
foreach ($i in $File)
{
    if (!($DGmembers | Where { $_.PrimarySMTPAddress -eq $i }))
    {
        if (Get-Recipient $i -ErrorAction SilentlyContinue)
        {
            Write-Host "Adding $($i) to $($DG)"
            Add-DistributionGroupMember $DG -Member $i
        } else {
            Write-Host -f Red -b Black "Could not add $($i) to $($DG) - Recipient not found"
        }
    }
}

The format of the input file is simply – just the primary email addresses, one per line.

Steve