Массовый импорт внешних контактов (MailContact) в on-Premies Exchange
В работе часто требуется заводить много внешних контактов в Exchange, руками делать это моветон, ниже опишу как я попытался автоматизировать этот процесс.
Мои действия разбиты на два этапа.
- Создание CSV-файла со сведениями о внешних контактах.
- Выполнение 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 файлу с импортируемыми данными.
$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 строки
следующий код.
$contacts | ForEach-Object {
Set-Contact -Identity $_.Name -Company $_.Company -Title $_.Title -Department $_.Department
}
Добавление контакта в группы безопасности Active Directory
Если нужно добавлять создаваемые контакты в определенные группы безопасности Active Directory, то все так же в в CSV-файл добавляем поле к примеру MemberOf
в которое указываем группы безопасности через запятую.
$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};
}
}
}
Скрытие внешних контактов из общей адресной книги
Если есть необходимость скрыть внешние контакты из общей адресной книги, то это делается так.
Скрытие одного внешнего контакта.
Set-MailContact <внешний_контакт> -HiddenFromAddressListsEnabled $true
Скрытие всех внешних контактов.
Get-Contact -ResultSize unlimited -Filter {(RecipientTypeDetails -eq 'MailContact')} | Set-MailContact -HiddenFromAddressListsEnabled $true
Скрытые внешние контакты не отображаются в общей адресной книге, однако их по-прежнему можно добавлять в качестве участников группы рассылки.
Обсуждение
Нет комментариев.