Powershell – синхронизация GAL


Когда-то я уже публиковал статью на эту тему, но она умерла вместе с тем сайтом… А тема осталась актуальной, поэтому вновь размещаю полезную информацию по синхронизации GAL (на сегодняшний день в контексте Exchange 2010).

 

Для синхронизации контактов глобальных адресных книг между разными лесами есть специальный продукт MIIS/ILM/FIM. Текущая версия Forefront Identity Manager (FIM) 2010 R2. Возможности его гораздо шире, чем просто синхронизация GAL, и, соответственно, цена ощутимая.

Если же вам нужна просто синхронизация GAL, то вы можете обойтись Powershell. Ниже приведены полезные ссылки и пример кода.

1.    Вы можете использовать ADSI API для поиска учетных записей пользователей в другом лесе (DirectorySearcher http://technet.microsoft.com/enus/library/ff730967.aspx)

2.    Затем создавать контакты из найденных учетных записей пользователей в локальном лесе. Вы можете делать это двумя способами:

2.1 С помощью ADSI. В этом случае вам нужно для каждого контакта выполнить UpdateRecipient из EMS http://technet.microsoft.com/enus/library/bb738148.aspx, чтобы конвертировать контакт AD в mailenabled contact Exchange.

2.2 С помощью EMS. В этом случае вам не нужно выполнять UpdateRecipient: просто используйте NewMailContact http://technet.microsoft.com/enus/library/aa998858.aspx для создания контактов в локальном лесу.

 

В статье http://msdn.microsoft.com/enus/subscriptions/ee633491.aspx вы найдете список атрибутов, которые обязательны для синхронизации, а также те, которые вы скорее всего захотите синхронизировать.

 

Пример кода (ADSI) импорта контактов:

 

# Где создаем контакты

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

 

# Поиск пользователей для импорта

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

 

# Для каждого найденного пользователя создаем контакт

$users | ForEachObject {

    $_ = $_.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()

 

# Если выполняем в EMS, то обновляем сразу GAL

 Update-Recipient $NewContact.displayname

 

 

}

 

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: