SCROLL
Среднее время на прочтение: 1 мин.

Массовый импорт внешних контактов (MailContact) в on-Premies Exchange

В работе часто требуется заводить много внешних контактов в Exchange, руками делать это моветон, ниже опишу как я попытался автоматизировать этот процесс.

Мои действия разбиты на два этапа.

  1. Создание CSV-файла со сведениями о внешних контактах.
  2. Выполнение PowerShell скрипта по созданию контактов (MailContact) на основе CVS-файла

Формирование CVS-файла

В CVS-файле обязательно должны быть следующие поля — FirstName, LastName, Name, ExternalEmailAddress, OrganizationalUnit, Alias.

Важный момент, если CSV-файл готовится в Excel, то нужно сохранять его в формате CSV (MS-DOS).

В итоге CSV-файл должен получится примерного такого формата.

FirstName,LastName,Name,ExternalEmailAddress,OrganizationalUnit,Alias
Ivan,Ivanov,Ivan Ivanov,ivan.ivanov@contoso.com,"CN=Users,DC=contoso,DC=com",ivan.ivanov

PowerShell скрипт

Описывать пошагово работу скрипта нет смысла, но хочу обратить внимание на помеченные строки в скрипте.

В строке 3 замените <ServerFQDN> на полное доменное имя вашего сервера Exchange (например, server01.contoso.com), в строке 7 укажите путь в вашему CSV файлу с импортируемыми данными.

PowerShell
$UserCredential = Get-Credential

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<ServerFQDN>/PowerShell/ -Authentication Kerberos -Credential $UserCredential

Import-PSSession $Session -DisableNameChecking;

$contacts = Import-CSV "C:\contacts.csv"

$contacts | ForEach-Object {
    New-MailContact -Name $_.Name -DisplayName $_.Name -Alias $_.Alias -ExternalEmailAddress $_.ExternalEmailAddress -OrganizationalUnit $_.OrganizationalUnit -FirstName $_.FirstName -LastName $_.LastName
}

Remove-PSSession $Session
По умолчанию используется запятая (,) при разборе CVS-файла. В случае если у вас разделитель отличный, то при импорте (7 строка) CVS-файла это нужно указать так -Delimiter ;

Добавление дополнительной информации в контакт

Если необходимо добавлять дополнительную информацию в mailСontact (Компания, Должность, департамент и т.д.) при создании контакта, то в CSV-файл можно добавить различного рода атрибуты которые применимы к объекту — MailContact (ссылка на информацию).

В основной скрип прописываем после 11 строки следующий код.

PowerShell
$contacts | ForEach-Object {
    Set-Contact -Identity $_.Name -Company $_.Company -Title $_.Title -Department $_.Department
}
где соответственно $_.Company, $_.Title, $_.Department это добавленные поля в CSV-файл.

Добавление контакта в группы безопасности Active Directory

Если нужно добавлять создаваемые контакты в определенные группы безопасности Active Directory, то все так же в в CSV-файл добавляем поле к примеру MemberOf в которое указываем группы безопасности через запятую.

PowerShell
$contacts | ForEach-Object {
    $contact = Get-ADObject -Filter "objectClass -eq 'contact' -and Name -eq '$($_.Name)'"

    if ($contact) {
        $groups = $_.MemberOf -split ','
        foreach ($group in $groups) {
            Set-ADGroup -Identity $group.Trim() -Add @{'member'=$contact.DistinguishedName};
        }
    }
}

Скрытие внешних контактов из общей адресной книги

Если есть необходимость скрыть внешние контакты из общей адресной книги, то это делается так.

Скрытие одного внешнего контакта.

PowerShell
Set-MailContact <внешний_контакт> -HiddenFromAddressListsEnabled $true

Скрытие всех внешних контактов.

PowerShell
Get-Contact -ResultSize unlimited -Filter {(RecipientTypeDetails -eq 'MailContact')} | Set-MailContact -HiddenFromAddressListsEnabled $true

Скрытые внешние контакты не отображаются в общей адресной книге, однако их по-прежнему можно добавлять в качестве участников группы рассылки.

Обсуждение

0 комментариев

Нет комментариев.