04.06.2007, 17:33 | #1 |
Участник
|
Ax3 KR2: Создание пользователя в ActiveDirectory
Пытаюсь написать скрипт для создания пользователя в AD по справочнику сотрудников. Пример:
X++: static void Test_CreateADUser(Args _args) { COM ldap = COM::getObjectEx("LDAP://OU=...,dc=...,DC=RU"); COM user = ldap.Create("user", "OU=testUser"); ; user.Put("samAccountName", "test"); } Метод 'Put' в COM-объекте класса '<неизвестно>' возвратил код ошибки 0x80004005 (E_FAIL), который означает: Общий сбой. Однако следующий код на VBS работает: Код: set ldap = GetObject("LDAP://OU=...,dc=...,DC=RU") set user = ldap.Create("user", "OU=testUser") user.Put "samAccountName", "test" |
|
04.06.2007, 17:54 | #2 |
Злыдни
|
Мне кажется, нужно рыть в сторону авторизации. От какого имени Axapta пытается в вызове получить доступ к AD? Ошибка похожа на ту, которая вылазит в VBS, если у пользователя нет прав на создание пользователя в AD
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
04.06.2007, 18:04 | #3 |
Участник
|
С авторизацией все нормально. Не работает конкретно Put. Если сказать
user.samAccountName("test"); то работает. Правда криво |
|
04.06.2007, 18:37 | #4 |
Злыдни
|
А через PutEx пробовали?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
05.06.2007, 09:04 | #5 |
Участник
|
То же самое
|
|
05.06.2007, 09:17 | #6 |
Участник
|
а вот такой скрипт
X++: ... COM user = ldap.Create("user", "cn=testUser"); ; user.FullName("Тестовый"); user.samAccountName("t"); user.SetInfo(); |
|
05.06.2007, 11:18 | #7 |
Злыдни
|
На MSDN даны рекомендации после вызова put при работе через интерфейс ADSI в конце вызвать setinfo()
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
05.06.2007, 11:23 | #8 |
Участник
|
При вызове put вылетает исключение - так что до setInfo не доходит.
Если работать через свойство, то оно почему-то не присваивается причем для userPrincipalName тоже - для него в AD пусто, а для samAccountName генерится значение так, как будто оно не задано. setInfo вызывается и другие свойства сохраняются. |
|
05.06.2007, 12:26 | #9 |
Злыдни
|
Стоп. А почему в коде:
Цитата:
COM user = ldap.Create("user", "OU=testUser");
Может здесь собака порылась?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
06.06.2007, 11:53 | #10 |
Участник
|
Да, причем даже шаманства с COMVariant вместо строк не помогают
Цитата:
|
|
06.06.2007, 12:06 | #11 |
Участник
|
Ошибка происходит по простой причине - Axapta передает строку в структуре VARIANT не как тип BSTR bstrVal, а как BSTR *pbstrVal. Т.е. как указатель на указатель.
Метод Put() не работает с такой ссылкой, по-этому и возвращает ошибку. Сейчас думаю, как это можно обойти
__________________
Axapta v.3.0 sp5 kr2 |
|
06.06.2007, 12:09 | #12 |
Участник
|
По поводу SetInfo()
Цитата:
The IADs::SetInfo method saves the cached property values of the ADSI object to the underlying directory store
__________________
Axapta v.3.0 sp5 kr2 |
|
06.06.2007, 12:33 | #13 |
Участник
|
В результате я позорно сдался. Написал wsc-обертку, которая при радобе с обзектом сначала высаживается во пременный каталог, потом обертывает объект.
|
|
06.06.2007, 13:38 | #14 |
Злыдни
|
Цитата:
Могу предложить только такой способ: - объявить переменные NameArg и DataArg типа string; - инициализировать переменные значениями; - вызывать метод Put(NameArg, DataArg).
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
06.06.2007, 13:44 | #15 |
Участник
|
Не поможет, к сожалению.
Внутри второй агрумент все равно будет преобразован к варианту с неправильным для функции типом
__________________
Axapta v.3.0 sp5 kr2 |
|
Теги |
ax3.0 |
|
|