Exchange 2007 has a feature that allows restrictions to be placed on a distribution group (I call them "distribution lists", or "DL's") that control who is allowed/permitted to send messages to them.
The Exchange Management Console enables you to search and add individual users to this list, but I found the process can be very slow and tedious, especially if you want to add a large number of users to this list, or want to add users to multiple DL's.
For this reason, I created the below script. Others who may have tried this using a simple "Set-DistributionGroup" command would have found that every time they tried to add a user it replaced any users who were already in the list. This script queries the already existing users and appends/adds the new user onto the already existing list. You will need to provide a list of users either within the script, or by importing a simple .txt file with a list of users you wish to add. For this example, I will use a .txt file.
The .txt file contains a simple list of users with a single name on each line;
firstname.lastname@domain.com
test.user1@domain.com
example.user2@domain.com
And here is the script:
#Name of Distribution Group/List to add user(s) to
$TargetDL = "DL_Test"
#Domain Controller Name - must be used to ensure each user is appended and not replaced.
$DC = "domaincontrollername"
#Import List of Users to add from .txt file
$UserListFile = "C:\UserList.txt"
$UserList = Get-Content $UserListFile
#Cycle through list of users and add them to 'Accept Messages Only From' list for DL
ForEach ($User in $UserList)
{
Set-DistributionGroup "$TargetDL" -AcceptMessagesOnlyFrom ((Get-DistributionGroup -DomainController "$DC" -identity "$TargetDL").AcceptMessagesOnlyFrom + "$User") -DomainController "$DC"
Write-Host "$User granted permission to send to $TargetDL"
}
Replace the $TargetDL, $DC, and $UserListFile variables with the relevant information for your Exchange environment