none
Адресная книга RRS feed

  • Вопрос

  • В домене есть два КД.

    Все пользователи живут в физической среде AD

    Появилась проблема с отсутствующими контактами.

    с 2014 года все работало нормально.

    И так наш метод

    1. Сначала запускаю скрипт Импорта контактов из смежных доменов. Домены мной не управляются, но доступы есть. Данный скрипт запускается один раз в неделю, в субботу в 20:55

    Get-ADUser -f * -Properties * -Server DC1 | 
    Select -Property Name,Mail,mobile,telephoneNumber,distinguishedName,manager,sAMAccountName,title,sn,cn,givenName,physicalDeliveryOfficeName,company,description,department |
    Export-Csv "c:\DC1.csv"  -Encoding Unicode
    Get-ADUser -f * -Properties * -Server DC2 | 
    Select -Property Name,Mail,mobile,telephoneNumber,distinguishedName,manager,sAMAccountName,title,sn,cn,givenName,physicalDeliveryOfficeName,company,description,department |
    Export-Csv "c:\DC2.csv"  -Encoding Unicode
    Get-ADUser -f * -Properties * -Server DC3 | 
    Select -Property Name,Mail,mobile,telephoneNumber,distinguishedName,manager,sAMAccountName,title,sn,cn,givenName,physicalDeliveryOfficeName,company,description,department |
    Export-Csv "c:\DC3.csv"  -Encoding Unicode


    2. Далее запускается скрипт удаления всех контактов в облаке. Данный скрипт запускается один раз в неделю, в субботу в 21:00

    ##Login Exchange Online PowerShell session
    $User = "user"
    $PWord = ConvertTo-SecureString –String "password" –AsPlainText -Force
    $Credential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $PWord
    connect-msolservice -credential $Credential 
    get-msolcontact -Maxresults 5000 | remove-msolcontact -force

    3. Каждый день запускается скрипт Импорта

    $User = "user"
    $PWord = ConvertTo-SecureString –String "password" –AsPlainText -Force
    $Credential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $PWord
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Credential -Authentication Basic -AllowRedirection
    Import-PSSession $Session
    $contacts | ForEach {Set-Contact $_.Mail -Phone $_.telephoneNumber -Mobile $_.Mobile -Company $_.Company -Title $_.Title -Department $_.Department -Office $_.physicalDeliveryOfficeName -FirstName $_.GivenName -LastName $_.sn}
    Import-Csv C:\DC1.csv|%{New-MailContact -Name $_.Name -DisplayName $_.Name -ExternalEmailAddress $_.Mail -FirstName $_.GivenName -LastName $_.sn}
    $Contacts = Import-CSV c:\DC2.csv
    $contacts | ForEach {Set-Contact $_.Mail -Phone $_.telephoneNumber -Mobile $_.Mobile -Company $_.Company -Title $_.Title -Department $_.Department -Office $_.physicalDeliveryOfficeName -FirstName $_.GivenName -LastName $_.sn}
    

    По результату работы скрипта Экспорта создаются csv файлы, в которых есть недостающие в облаке контакты.

    Но если я зайду в админку в облаке, данных контактов нет, соответственно и в outlook в адресной книге их никто не может найти.

    В самом большом csv файле - 5479 контактов

    Отсутствуют сотрудники из разных доменов. Сколько отсутствуют я не знаю.

    Можете помочь мне по правильной синхронизации контактов?

    Спасибо!

    12 августа 2020 г. 13:55

Ответы

  • сначала экспорт в CSV, потом импорт. Вот пример импорта - ссылка.

    Import-Module ActiveDirectory
    $Users = Import-CSV C:\path\to\users.csv
    foreach($User in $Users){
      $Params = @{
        SamAccountName = $User.SamAccountName
        Description = $User.Description
        GivenName = $User.GivenName
        Surname = $User.Surname
        Department = $User.Department
        Company = $User.Company
        EmailAddress = $User.EmailAddress
        Path = "OU=Zimbra users,DC=domain,DC=com"
        Type = "Contact"
      }
      New-ADUser @Params
    }

    12 августа 2020 г. 14:43

Все ответы

  • из вопроса непонятно: вы используете Azure AD Connect для синхронизации "физического" AD в O365 или нет?

    Если используется, то почему просто не создавать контакты в "физическом" AD, а потом не синхронизировать их в облако?


    12 августа 2020 г. 14:16
  • В облаке только почта.

    AD на физических серверах

    На отдельном физическом сервере настроена  Azure AD Connect

    12 августа 2020 г. 14:19
  • ну значит у вас стандартный гибридный AD. просто создавайте контакты в AD (скрипты в интернете есть), и они будут (в зависимости от настройки Azure AD Connect) автоматически синзронизироваться в O365.
    12 августа 2020 г. 14:22
  • То есть мне все контакты из смежных доменов отправлять не в csv файл, а в отдельный контейнер?

    И этот контейнер синхронизировать с облаком?

    12 августа 2020 г. 14:26
  • да, в отдельную OU
    12 августа 2020 г. 14:28
  • Может поделитесь скриптом?

    Сходу в гугле не нашлось

    12 августа 2020 г. 14:32
  • сначала экспорт в CSV, потом импорт. Вот пример импорта - ссылка.

    Import-Module ActiveDirectory
    $Users = Import-CSV C:\path\to\users.csv
    foreach($User in $Users){
      $Params = @{
        SamAccountName = $User.SamAccountName
        Description = $User.Description
        GivenName = $User.GivenName
        Surname = $User.Surname
        Department = $User.Department
        Company = $User.Company
        EmailAddress = $User.EmailAddress
        Path = "OU=Zimbra users,DC=domain,DC=com"
        Type = "Contact"
      }
      New-ADUser @Params
    }

    12 августа 2020 г. 14:43
  • Буду пробовать.

    Мне надо, чтобы те кто уволились из облака тоже убирались

    И если изменил телефон у сотрудника, чтобы скрипт его перезаписал

    12 августа 2020 г. 14:56
  • любые изменения в AD будут синхронизированы с O365. Удаляйте контакт уволившегося сотрудника - удалится из O365
    12 августа 2020 г. 16:53
  • Обратите внимание что есть два типа контактов:

    MailContact

    MailUser

    Если будет необходимость "контактам" создать ящик в вашем EXO, то их надо создавать как MailUser

    Use directory synchronization to manage mail users

     Recipient Type Values


    Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    13 августа 2020 г. 9:48
    Модератор
  • Спасибо, нужны только контакты сторонних доменов
    13 августа 2020 г. 10:44
  • Поясните мне, пожалуйста, если я скриптом из CSV файла загружу список контактов в AD в отдельную OU=Contacts, то по каким признакам Облако поймет, что это контакты, а не пользователи?

    Мне надо, чтобы у контактов были подгружены атрибуты:

    Name,Mail,mobile,telephoneNumber,distinguishedName,manager,sAMAccountName,title,sn,cn,givenName,physicalDeliveryOfficeName,company,description,department

    Просто если я внутри OU=Contacts ПКМ создать - Контакт, то это уже какой то совсем другой контакт, не почтовый

    14 августа 2020 г. 10:45
  • по AD-атрибутам:

    и грубо говоря, если у "какого-то" контакта записан почтовый адрес - это почтовый контакт.

    14 августа 2020 г. 10:58
  • Не совсем понял. В АД адрес почтовый заполнен, но в атрибутах нет - contact

    14 августа 2020 г. 11:07
  • ну так у вас это не контакт, а пользователь... просто сравните количество вкладок и увидите разницу.
    14 августа 2020 г. 11:50
  • Дошло. Вы мне прислали скриншот контакта в AD после отработки скрипта?
    14 августа 2020 г. 12:07
  • нет, это просто контакт в AD:

    скрипт тут не при чём. нужен тольок для того, чтобы автоматизировать создание контактов.
    14 августа 2020 г. 12:19
  • Ок, спасибо!

    Теперь буду над скриптом шаманить.

    14 августа 2020 г. 12:21