|
|
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Пытаюсь из Delphi работать с ADSI (Active Directory Service Interfaces). Задача: Добавить существующего пользователя виндоуз в указанную группу пользователей. Например, в виндоуз на локальном компе создан пользователь с именем user1, нужно программно из Delphi добавить user1 в группу "Администраторы" данного компа, т.е. сделать user1 локальным админом. Я пока сделал следующее: Импортировал в Delphi стандартную библиотеку типов ADSI (activeds.tlb), содержащую все необходимые для работы с ADSI интерфейсы любезно предоставленные Microsoft. Далее у себя в приложении создаю COM-объекты, чтобы дёргать за эти интерфейсы. Научился уже создавать пользователя, задавать ему пароль, ставить галочку его атрибуту "Срок действия пароля не ограничен". Делаю это так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. А как добавить пользователя к заданной группе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2009, 13:38 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
В пределах вашего кода примерно так: Код: plaintext 1. 2. 3. еще можно сразу создать пользователя в нужной группе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2009, 13:55 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Альт, да, получилось, спасибо! Только почему то не срабатывает проверка на существование (( Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2009, 14:01 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
И ещё: А как нужно изменить мой код, чтобы он работал не только локально? Я теперь хочу создать не просто локального пользователя, а создать пользователя домена. В MSDN написано, что для этого нужно использовать не WinNT провайдера, а LDAP провайдера, но приведён пример создания только локального пользователя. получить пользователя предлагается вот таким образом: локального: GetObject("WinNT://MYCOMPUTER/jeffsmith,user") доменного: GetObject("LDAP://CN=JeffSmith,OU=Sales,DC=Fabrikam,DC=Com") Что здесь есть что? CN=JeffSmith=имя пользователя OU=Sales=??? DC=Fabrikam=??? DC=Com=??? Локально пользователь создаётся следующим образом: Dim comp As IADsContainer Dim usr as IADsUser Set comp = GetObject("WinNT://MyMachine,Computer") Set usr = mach.Create("user","jeffsmith") а доменный как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2009, 15:27 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Один вопрос отпал: проверка на существование пользователя в группе срабатывает, наверное ошибся в названии группы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2009, 18:31 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Вроде как разобрался: DC - соответствует домену, указывается от вложенного элемента к корню, т.е. если домен задан так: mycompany.ru, то в LDAP нужно писать так: DC=mycompany,DC=ru OU - соответствует организационной единице (Organizational Unit), указывается от вложенного элемента к корню, т.е. если у нас в AD есть орг.един. departments, в которой собраны все подразделения компании, например: sales, it, administration, которые в свою очередь тоже орг.единицы только вложенные, то в LDAP нужно писать так: OU=sales,OU=departments CN - соответствует контейнеру (Container), другими словами группе пользователей домена, указывается от вложенного элемента к корню, т.е. если у нас в AD есть контейнер Users, а в нём есть пользователь Vasya, то в LDAP нужно писать так: CN=Vasya,CN=Users Мне нужно получить доступ к пользователю домена Vasya в группе-контейнере Users домена mycompany.ru на сервере serv Я написал такой путь: LDAP://serv/CN=Vasya,CN=Users,DC=mycompany,DC=ru сработало прекрасно! Объект я получил. Далее, я попытался получить доступ к пользователю Petr, который не в контейнере, а в организационной единице departments.sales домена mycompany.ru на сервере serv Я написал такой путь: LDAP://serv/CN=Petr,OU=sales,OU=departments,DC=mycompany,DC=ru не сработало ((( В чём может быть дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 12:35 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
История получила своё продолжение: Как оказалось LDAP://serv/CN=Petr,OU=sales,OU=departments,DC=mycompany,DC=ru работает прекрасно. Дело совершенно не в том где пользователь находится в контейнере или в организационной единице, а в использовании в пути имени пользователя. Оказывается, Petr - это свойства пользователя First Name + ' ' +Initials +'. '+Last Name в AD. А я думал, что Petr - это Logon Name. Т.е. на самом деле нужно писать так: LDAP://serv/CN=Petr Ivanov,OU=sales,OU=departments,DC=mycompany,DC=ru и тогда объект будет успешно получен. Беда в том, что я заведомо знаю только Logon Name пользователя, т.е. теперь задача сводится к тому чтобы по Logon Name получить First Name, Initials и Last Name. Я думаю, нужно использовать интерфейс IADsADSystemInfo... Подскажите как лучше это сделать? Как пробежаться по всем пользователям и по известному logon name получить First Name, Initials и Last Name? может я в чём то заблуждаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 14:15 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Поиск реализуется через IDirectorySearch. Только декларацию его методов и используемых структур в сверяй с MSDN. ActiveDs_TLB экспортируется с ошибками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 14:56 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Noskov, Эх, мне бы пример кода на делфи, работающего с IDirectorySearch. Например, как с помощью IDirectorySearch просканировать всех пользователей по заданному LDAP-пути: LDAP://serv/OU=sales,OU=departments,DC=mycompany,DC=ru ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2009, 11:47 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
просканировать - это перебрать всех пользователей по указанному пути, найти среди них пользователя по заданному logon name и получить у этого найденного пользователя FullName. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2009, 11:55 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
verter, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2010, 20:09 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Мне нужно в Delphi зачитать объекты AD с определенным набором атрибутов. Когда брать простые атрибуты типа Name, Mail, OU, и т.д. проблем никаких - VarToStr - и все ок. Но я столкнулся с серьезной проблемой. Часть атрибутов в запросе более сложных форматов, например Array of Variant (с этим я разобрался) и Dispatch (вот этот никак не могу осилить) как его распарсить в Delphi и получить конкретное стороковое значение. Работаю через ADOQuery. Запрос простой, выглядит так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Подскажите, плиз, как получить значение атрибута, например pwdLastSet. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2013, 17:59 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Удалось решить проблему, почитав форум. Может еще кому пригодится: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2013, 09:20 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
Вдруг кому пригодится для получения информации о пользователе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 11:00 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
При попытке установить в 7-ю Дельфю, говорит - ADSI.pas(1): Program or unit 'ADSI.pas' recursively uses itself ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 16:05 |
|
||
|
работа с ADSI
|
|||
|---|---|---|---|
|
#18+
prog123, Для Delphi 7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 17:02 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=36380746&tid=2039667]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
204ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 524ms |

| 0 / 0 |
