Импорт контактов из AD в локальные контакты Outlook

По мотивам темы на форуме набросал скриптик для импорта контактов из Active Directory в Outlook’овские. Писал ради интереса, так что берёт только фамилию и емейл, впрочем при желании думаю несложно будет добавить еще свойств.

#OU в котором ищем контакты
$OU = [ADSI]"LDAP://OU=Contacts,OU=Test,DC=Domain,DC=local"

#Подключаемся к Outlook
$outlook = New-Object -ComObject Outlook.Application
$mapi = $outlook.GetNamespace("MAPI")
#Получаем папку контактов
$Contacts = $mapi.GetDefaultFolder(10)

#Ищем в заданном OU объекты типа контакт
$selector = New-Object system.DirectoryServices.DirectorySearcher
$Selector.SearchRoot = $OU
$selector.Filter = '(objectClass=Contact)'
$selector.FindAll() | Foreach {
    #И для каждого из них...
    Write-Host ("Importing " + $_.Properties.name)
    #Создаем Outlook'овский объект контакта и заполняем свойства
    $Contact = $outlook.Application.CreateItem(2)
    $Contact.LastName = $_.Properties.sn
    $Contact.Email1Address = $_.Properties.mail
    #Сохраняем контакт
    $Contact.Save()
}


комментариев 7 to “Импорт контактов из AD в локальные контакты Outlook”

  1. Alexx Says:

    Хорошая вещь! А подскажи, как поправить скрипт, чтобы он писал не в Outlook, а в файл *.txt или *.xls?

  2. Xaegr Says:

    В .csv пойдёт? Он открывается excel’ом как таблица.
    $selector.FindAll() |
    select @{name=»Имя»;expression={$_.Properties.name}},
    @{n=»EMail»;E={$_.Properties.mail}}

  3. Serg Says:

    Когда-то писал подобное на vbs, намучался помню неслабо.

  4. Xaegr Says:

    2 Serg: Угу, потому и …🙂

  5. rabidim Says:

    Use script magic to turn your Outlook MAPI based contact information to a lightening fast Active Directory, Exchange enhanced LDAP implementation

    http://www.msexchange.org/articles/Migrating-Contacts-Distribution-Lists-Outlook-Active-Directory.html

  6. Xaegr Says:

    2 rabidim: Угу, очень полезно для сравнения🙂

  7. Alexander Says:

    Подскажите, а как сделать, чтобы не создавал дублирующие контакты в outlook?
    Получается, что сколько раз не запускай скрипт, столько раз будет импортить одних и тех же юзеров.

    В качестве первого опыта позволил себе заменить:

    $Users = $mapi.GetDefaultFolder(10)
    $selector = New-Object system.DirectoryServices.DirectorySearcher
    $Selector.SearchRoot = $OU
    $selector.Filter = ‘(mail=*)’
    $Users = $selector.FindAll() | Foreach {

    на сколько корректно это, если нужно брать не контакты LDAP, а снимать инфо с полей юзеров?
    В принципе оно как-то заработало🙂


Обсуждение закрыто.

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