The Magician

This is an old revision of the document!


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

Внешние контакты в Exchange - это отдельные объекты AD без внутреннего логина. Данные контакты могут иметь адреса электронной почты, которые в целом в рамках Exchange-сервера будут восприниматься как ВНЕШНИЕ пользователи.

К примеру, ничего не мешает добавить эти учётные записи с типом “контакт” в группу рассылки. Однако в случае, если группа рассылки разрешает получение почты только от отправителей в рамках организации, то письма, полученные от контактов, добавленных в группу, приниматься сервером не будут. Если нам необходимо изменить это поведение, то политику отправки группы рассылки необходимо пересмотреть.

Автоматизация создания большого количества контактов из CSV

Если нам требуется массово создать большое количество контактов в 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
работа_с_внешними_контактами.1787128290.txt.gz · Last modified: by jp