Powershell for Windows

25.09.2009

Импорт контактов из другого домена

Filed under: PowerShell, Windows — Метки: , , , , , , , , — Yamshikov Pavel @ 8:01 дп

Когда у вас работает Active Directory и почтовая система Exchange, то пользователи получают глобальную адресную книгу, в которой есть почтовые адреса всех пользователей AD и всех почтовых контактов заведенных в AD. Это очень удобно: достаточно набрать в Outlook-е фамилию и адрес будет найден автоматически или предложены варианты.

Не редко рядом с нашим доменом или лесом существуют другие: соседних организаций, подразделений, фирм и т.п. При интенсивной переписке с пользователями из этих доменов хочется иметь их адресную книгу, чтобы каждый раз не искать нужного человека и не выяснять какой у него почтовый адрес или номер телефона. Обычно пользователи сами создают контакты у себя в Outlook-е. Но тогда теряется преимущество глобальной адресной книги: каждый пользователь должен сам найти информацию и создать контакт у себя. Лучше если это сделает один раз администратор, и контакты будут доступны всем пользователям. Но заводить контакты в большом количестве достаточно обременительно. К тому же их надо периодически обновлять.

Для синхронизации лесов (доменов) существуют специальные приложения. Например, Microsoft Identity Lifecycle Manager (ILM) или его предыдущая версия Microsoft Identity Integration Server (MIIS). Это мощние универсальные продукты, которые позволяют синхронизировать учетные записи, их свойства, пароли, сертификаты и все остальные атрибуты, позволяют гибко настраивать списки синхронизируемых объектов и их атрибутов, правила разрешения конфликтов и т.д. С помощью этих продуктов можно решить поставленную задачу. Вот только они платные и сложные. И в простых случаях, как наш, нет необходимости их использовать – можно обойтись досточно простым скриптом.

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

Вот сам скрипт:

$base = [ADSI]»LDAP://ou=Contacts, ou=DEP,dc=domain,dc=ru»

$users = (new-object System.DirectoryServices.DirectorySearcher([ADSI]»LDAP://ou=DEP1,dc=domain1,dc=ru»,»(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(title=*)))»)).findAll()

$users | ForEach-Object {

$_ = $_.GetDirectoryEntry()
$NewContact = $base.Create(«contact»,»cn=» + $_.cn)

$NewContact.SetInfo()

$NewContact.extensionAttribute15 = $base.distinguishedName

$NewContact.displayname = $_.displayname
$NewContact.givenname = $_.givenname
$NewContact.sn = $_.sn
$NewContact.initials = $_.initials
$NewContact.description = $_.description

$NewContact.department = $_.department
$NewContact.title = $_.title
$NewContact.company = $_.company

$NewContact.telephoneNumber = $_.telephoneNumber
$NewContact.othertelephone = $_.othertelephone

$NewContact.ipPhone = $_.ipPhone
$NewContact.otherIpPhone = $_.otherIpPhone

$NewContact.mobile = $_.mobile
$NewContact.otherMobile = $_.otherMobile

$NewContact.facsimileTelephoneNumber = $_.facsimileTelephoneNumber
$NewContact.otherfacsimileTelephoneNumber = $_.otherfacsimileTelephoneNumber

if ($_.proxyaddresses) {

$NewContact.proxyaddresses = $_.proxyaddresses
$NewContact.targetAddress = $_.proxyaddresses -clike «SMTP:*»
$NewContact.mailNickname = $_.cn

}

$NewContact.SetInfo()

}

Источник

Создайте бесплатный сайт или блог на WordPress.com.