The Magician

This is an old revision of the document!


Работа с внешними контактами

Внешние контакты в 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//. Тогда необходимо массово установить для них соответствующий флаг. Сделаем это следующим образом:

Get-MailContact -OrganizationalUnit "OU=TestContacts,OU=Contacts,DC=domain,DC=local" |
    Set-MailContact -HiddenFromAddressListsEnabled $true
работа_с_внешними_контактами.1787128257.txt.gz · Last modified: by jp