В версии 4.8 есть два варианта для импорта из AD - либо сервер ставится на контроллер домена, либо через скрипт делается экспорт в файл и потом этот файл импортируется в MyChat Server.
Так вот, не везде это работает. В моём случае дело идёт так:
- первый вариант - сервер установлен и запущен на контроллере домена (Windows Server 2003 R2 SP2) от имени администратора домена, в администрировании ввожу имя домена, нажимаю "Получить пользователей из AD" и получаю ошибку "Пользователи не найдены или компьютер не в домене". Причём видно, что MyChat Server домен явно видит, так как если ввести заведомо неверное имя домена, то сервер начинает долго его искать, а если ввести правильное имя, то ошибка появляется сразу.
- второй вариант - сервер установлен и запущен абы где, а на контроллер домена копируется файл скрипта для экспорта пользователей в файл "users.ad". Запускаю файл скрипта (на контроллере домена) в командной строке из-под администратора домена, он запускается, что-то делает несколько секунд и потом выдаёт:
dsget failed:Directory object not found.
type dsget /? for help.Export completed successfully.
И файл "users.ad" не создаётся.
Разгадка
Скрипт простой, поэтому я решил разобрать его и выяснить, почему он не работает. И выяснил. Проблема была в самой главной строке - в запросе в AD:
dsquery user -name * -limit 0 | dsget user -samid (многа_букафф) > users.ad
Если эту строку выполнить вручную в командной строке, то будет та же ошибка "dsget failed:Directory object not found."
Однако всё встаёт на свои места, если конкретизировать запрос:
dsquery user ou=filial,dc=mycompany,dc=ru -name * -limit 0 | dsget user -samid (и так далее)
В крупных компаниях пользователей в AD распределяют по подразделениям (ou), соответственно у меня в домене "mycompany.ru" (это имя домена я придумал для примера, но настоящее имя похожее) в его корне создано подразделение с именем "Filial", где сидят те юзеры, которых я хочу экспортировать в "users.ad".
Вывод: у меня запрос в AD отрабатывает, если указано где искать - "ou=filial,dc=mycompany,dc=ru". Причём просто "dc=mycompany,dc=ru" недостаточно, тоже будет ошибка.
По поводу users.ad, который у меня не создавался даже при исправленном запросе: я скрипт запускал откуда угодно - и с Рабочего стола, и с диска C, под полнейшими правами (то есть ничто не мешало файлу "users.ad" создаться в том же месте, где лежит файл скрипта), но "users.ad" не создавался. Я написал абсолютный адрес, например "C:\users.ad", тогда файл создался.
В результате рабочая команда запроса выглядела у меня так:
dsquery user ou=GRPB_User,dc=grpb,dc=ru -name * -limit 0 | dsget user -samid (многа_букафф) > C:\users.ad
Почему так происходит - не знаю, мой случай, возможно, имеет какую-то специфику в AD (не я её создавал).
Скрипт я исправил, а вот встроенную функцию импорта только разрабы могут скорректировать. Хотелось бы, чтобы встроенная в MyChat Server функция импорта была более аккуратная и детальная, может даже с возможностью выбора подразделения домена, откуда надо импортировать. То, что сейчас - "Получить пользователей из AD" - очень убого для крупной компании.