Как стать автором
Обновить

Импортируем контакты в Opera из Active Directory

Opera
Работаю я в компании, в которой количество сотрудников имеющих электронную почту стремится к бесконечности. Конечно же, все эти люди есть в AD с именами и фамилиями. И в очередной раз, когда я полез смотреть адрес электронной почты сотрудника на корпоративный портал, мне это надоело и я задумался об импорте контактов в Opera из AD.

Поиск в яндексогуглах мне ничего не дал, поэтому я решил заниматься пионерством. Для начала я заглянул в файл contacts.adr, который хранится в папке профиля и понял, что он хранится в кодировке UTF-8 и имеет определенную структуру:

  1. #CONTACT
  2. ID=1
  3. NAME=Иванов Иван Иваныч
  4. URL=
  5. CREATED=1287730972
  6. DESCRIPTION=
  7. MAIL=ivanov@domain.com
  8. PHONE=
  9. FAX=
  10. POSTALADDRESS=
  11. PICTUREURL=
  12. ICON=Contact0
  13. #CONTACT
  14. ID=2
  15. NAME=Петров Петр Петрович
  16. URL=
  17. CREATED=1292317914
  18. DESCRIPTION=
  19. MAIL=petrov@domain.com
  20. PHONE=
  21. FAX=
  22. POSTALADDRESS=
  23. PICTUREURL=
  24. ICON=Contact0


ID, NAME, MAIL и т.п. вопросов не вызывают. Поле CREATED хранит по всей видимости дату и время создания контакта, но для меня она не важна, и поэтому я туда решил записывать конкретное значение, взятое из готового файла.

Настало время приступить к непосредственно созданию инструмента импорта. Поискав в сети примеры работы с AD, наваял это:

  1. var rootDSE, domainNC, connection, command, recordset;
  2. var fso, f1;
  3. rootDSE = GetObject("LDAP://rootDSE");
  4. domainNC = rootDSE.Get("defaultNamingContext");
  5. connection = new ActiveXObject("ADODB.Connection");
  6. connection.Open("Provider=ADsDSOObject;");
  7. command = new ActiveXObject("ADODB.Command");
  8. command.ActiveConnection = connection;
  9. command.CommandText =
  10. "SELECT displayname,mail,telephoneNumber FROM 'LDAP://"+domainNC+"' WHERE objectClass = 'User'"
  11. command.Properties("Cache Results") = false;
  12. command.Properties("Page Size") = 100;
  13. command.Properties("Sort On") = "mail";
  14. command.Properties("Timeout") = 0;
  15. recordset = command.Execute();
  16. fso = new ActiveXObject("Scripting.FileSystemObject");
  17. f1 = fso.CreateTextFile("contacts.adr", true);
  18. i = 1;
  19. while (! recordset.EOF) {
  20. if ((recordset.Fields("mail").Value != null) && (recordset.Fields("displayname").Value != null))
  21. {
  22. f1.WriteLine("#CONTACT");
  23. f1.WriteLine(" ID=" + i);
  24. f1.WriteLine(" NAME=" + recordset.Fields("displayname").Value);
  25. f1.WriteLine(" URL=");
  26. f1.WriteLine(" CREATED=1292317914");
  27. f1.WriteLine(" DESCRIPTION=");
  28. f1.WriteLine(" MAIL=" + recordset.Fields("mail").Value);
  29. f1.WriteLine(" PHONE=" + recordset.Fields("telephoneNumber").Value);
  30. f1.WriteLine(" FAX=");
  31. f1.WriteLine(" POSTALADDRESS=");
  32. f1.WriteLine(" PICTUREURL=");
  33. f1.WriteLine(" ICON=Contact0");
  34. }
  35. recordset.MoveNext();
  36. i = i + 1;
  37. }
  38. f1.Close();
  39. connection.Close();

Проще говоря, делаем запрос к домену и берем оттуда имя, почту и телефонный номер сотрудника. Затем сортируем всё по адресу электронной почты и, отсекая записи с пустыми адресами или пустыми именами (у меня почему-то такие были), записываем всё это в файл, постоянно увеличивая ID контакта. ID, возможно, имеет смысл начинать не с единицы, а с большего числа, т.к. это позволит оставить в адресной книге уже существующие контакты.
Сохранил этот… кхм… код в файле ad.js и запустил командой cscript ad.js из консоли.

Получив заветный файл, я изменил ему кодировку с помощью notepad++ на UTF8 и заменил при закрытой Опере файл в папке профиля.
В итоге получил несколько сотен контактов у себя в адресной книги легким движением руки :)

Также, если в AD хранится отдел, в котором работает сотрудник, можно заморочиться и рассовать контакты по папкам с помощью «тэга» #FOLDER. Пытливый читатель при желании может сам придумать как это сделать :)

Конечно, наверное, существует более легкий и элегантный способ сделать то же самое, но мой велосипедик, созданный за 10 минут, довёз меня именно туда куда мне было нужно.
Теги:operaadконтактыимпорт
Хабы: Opera
Всего голосов 8: ↑6 и ↓2+4
Просмотры1.6K

Похожие публикации

Лучшие публикации за сутки