Итак, требуется создать кучу почтовых контактов средствами powershell v. 2.0.1.1 с использованием модуля работы с AD. Попытаюсь, как обычно, описать самым простейшим языком, понтяным самому неопытному администратору.
1. Создаем файл в MS Excel с именем contacts_list, сохраем в формате CSV по пути С:\CSV, и именуем в файле столбцы вот так:
| Name | mailNickname | Type | proxyAddresses | targetAddress |
в принципе этих параметров хватает для создания полноценного контакта и Exchange его видит, и может с ним работать, в какой бы папке-OU в вашем AD он у вас не был бы.
Какие конкретно поля в свойствах объекта "контакт" отражают эти столбцы?
Вот разъяснения, типа табличка)))
Параметр столбца - Название в редакторе атрибутов ADSI (пояснение) - Русскоязычное обозначение на свойствах контакта
Name - CN (каноническое имя объекта) - Имя
Mail - Mail (электронная почта) - Эл.почта
mailNickname - mailNickname (алиас Exchange, псевдоним) - отображается только в редакторе атрибутов
Type - ObjectClass (класс (тип) объекта) - отображается только в редакторе атрибутов
proxyAddresses - proxyAddresses (адрес внешней по отношению к домену электропочты в формате SMTP:address@domain.ru) - отображается только в редакторе атрибутов
targetAddress - targetAddress (адрес внешней по отношению к домену электропочты в формате SMTP:address@domain.ru) - отображается только в редакторе атрибутов
Заполняем столбцы, например
| Name | mailNickname | Type | proxyAddresses | targetAddress | |
| Vasiliy Terkin | vasil@rambler.ru | Partners_Sales_0001 | contact | SMTP:vasil@rambler.ru | SMTP:vasil@rambler.ru |
Примечание:
mailNickname должен отображать принадлежность к какой-либо группе рассылки, и лучше, если будет иметь порядковый номер. Встречал глюки, когда все контакты имели одинаковый mailNickname и глюки были неприятные и странные.
proxyAddresses, targetAddress обязаельно должные быть в указанном формате SMTP:adres@domain.ru, иначе Exchange не поймет контакта и будет выдавать ошибку о неверном формате.
2. Создаем файл с create_contact и расширением ps1 и копируем туда вот такой код:
Import-CSV -Path "C:\CSV\contacts_list.csv" | ForEach-Object -process {New-ADObject -Path "OU=PostContact,DC=domain,DC=corp,DC=local" -Name $_.Name -Type $_.Type -DisplayName $_.Name -OtherAttributes @{'Mail'=$_.mail; 'proxyAddresses'=$_.proxyAddresses; 'targetAddress'=$_.targetAddress; 'mailNickname'=$_.mailNickname}}
Что тут куда? Разберем по кускам:
Import-CSV -Path "C:\CSV\contacts_list.csv" - команда забирает данные из файла расположенного по пути C:\CSV\contacts_list.csv
| ForEach-Object -process { - и передает данные в конвейер обработки, причем каждое значение обрабатывается отдельно в соответствии с именами столбцов
New-ADObject - сам конвейер представляет собой команду создания в AD объекта (справка в powershell по вызову get-help new-adobject - full)
-Path "OU=PostContact,DC=domain,DC=corp,DC=local" - путь, по которому будет создан почтовый контакт. Посмотреть его можно открыв AD и щелкнув свойства OU (контейнера) и просмотрев путь во вкладе "Объект" и переделав его в соответствии с форматом в примере. Если этот параметр убрать - контакты создадутся в Users, это путь по умолчанию.
-Name $_.Name -Type $_.Type -DisplayName $_.Name - обязательные параметры (Name и Type) и не очень обязательный -
DisplayName. Их надо создавать понятыми, можно и кириллицей, можно латинскими буквами. Есть ограничение по длине, вроде бы, точно не помню - 64 символа.
-OtherAttributes @{'Mail'=$_.mail; 'proxyAddresses'=$_.proxyAddresses; 'targetAddress'=$_.targetAddress; 'mailNickname'=$_.mailNickname}} - самое важное. Почтовые адреса нельзя передать просто так, как Name и Type. Почтовые адреса это типа otherattributes - дополнительные атрибуты, но их также можно передать из столбцов файла .CSV. Не забывайте проверить все символы и скобки, в конце должно быть 2 скобки.
3. Сохраняем файлы и проверяем пути -C:\CSV - в файле и в реале)))
4. Открываем powershell на контроллере домена (контроллер не должен быть типа ReadOnly!!!), выполняем последовательно 2 команды:
Set-ExecutionPolicy Unrestricted
import-module activedirectory
5. Выполняем C:\CSV\create_contact.ps1
6. Наблюдаем (не забываем сделать рефреш консоли) в OU PostContact новые почтовые контакты.
Ну и напоследок, несколько советов.
- Если у вас полноценная версия powershell, то вызов из нее powershell_ise откроет очень удобный редактор скриптов с возможностью запуска и прочими удобствами.
- Файлы CSV должны быть в кодировке Unicode, если у вас ANSI - будет ошибка.
- Можно добавить еще массу столбцов и, следовательно, атрибутов, к почтовому контакту. Например, некоторым Exchange может потребоваться такой атрибут контакта, как legacyExchangeDN. Узнать его несложно - создаем руками почтовый контакт в АД, смотрим этот параметр во вкладке "Редактор атрибутов" (если этой вкладки нет - включаем ее в консоли вот так: меню Вид \ Дополнительные компоненты). Соответственно к файлу с данными добавляем столбец legacyExchangeDN, заполняем его отредактированным значением, скопированным из только что созданного контакта, а в скрипте после 'mailNickname'=$_.mailNickname добавляем
'legacyExchangeDN'=$_.legacyExchangeDN. Не забываем скобки.