Внешние контакты в Exchange - это отдельные объекты AD без внутреннего логина. Данные контакты могут иметь адреса электронной почты, которые в целом в рамках Exchange-сервера будут восприниматься как ВНЕШНИЕ пользователи.
К примеру, ничего не мешает добавить эти учётные записи с типом “контакт” в группу рассылки. Однако в случае, если группа рассылки разрешает получение почты только от отправителей в рамках организации, то письма, полученные от контактов, добавленных в группу, приниматься сервером не будут. Если нам необходимо изменить это поведение, то политику отправки группы рассылки необходимо пересмотреть.
Если нам требуется массово создать большое количество контактов в AD, то автоматизировать процесс не слишком сложно. Представим, что у нас есть CSV-файл, содержащий имя, должность и email контактов.
name,title,email Иван Иванов,Менеджер,ivan@example.com Петр Петров,Директор,petr@example.org
Скрипт, который массово создаст контакты из CSV-файла, путь к которому указан в переменной $CsvPath в OU, DN которого содержится в $OU, будет выглядеть так:
$CsvPath = "C:\Temp\contacts.csv"
$OU = "OU=TestContacts,OU=Contacts,DC=domain,DC=local"
$Contacts = Import-Csv -Path $CsvPath -Delimiter "," -Encoding UTF8
foreach ($Contact in $Contacts) {
if ([string]::IsNullOrWhiteSpace($Contact.name) -or
[string]::IsNullOrWhiteSpace($Contact.email)) {
Write-Warning "Пропущена запись: отсутствует name или email."
continue
}
$DisplayName = "$($Contact.name.Trim()) (Внешний контакт)"
$Email = $Contact.email.Trim()
$Title = $Contact.title.Trim()
try {
Write-Host "Создание контакта: $DisplayName <$Email>"
New-MailContact `
-Name $DisplayName `
-DisplayName $DisplayName `
-ExternalEmailAddress $Email `
-OrganizationalUnit $OU `
-ErrorAction Stop
if (-not [string]::IsNullOrWhiteSpace($Title)) {
Set-Contact `
-Identity $DisplayName `
-Title $Title `
-ErrorAction Stop
}
Write-Host "Создан: $DisplayName"
}
catch {
Write-Warning "Ошибка при создании '$DisplayName': $($_.Exception.Message)"
}
}
Скрипт необходимо выполнять в EMS на сервере Exchange.
Теперь мы можем массово добавить созданные контакты в какую-либо группу рассылки:
Get-MailContact -OrganizationalUnit "OU=TestContacts,OU=Contacts,DC=domain,DC=local" |
ForEach-Object {
Add-DistributionGroupMember -Identity "TestDistrGroup" -Member $_.Identity
}
Возможно, мы не хотим, чтобы созданные контакты появлялись в глобальной адресной книге Exchange. Тогда необходимо массово установить для них соответствующий флаг HiddenFromAddressListsEnabled. Сделаем это следующим образом:
Get-MailContact -OrganizationalUnit "OU=TestContacts,OU=Contacts,DC=domain,DC=local" |
Set-MailContact -HiddenFromAddressListsEnabled $true