Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 01.03.2022
Сообщений: 3

Кроссдоменный запрос к Active Directory скриптом Visual Basic

01.03.2022, 12:59. Показов 1342. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день.
Никак не получается до конца заставить работать скрипт. Суть проблемы: скрипт запрашивает в AD данные по пользователям из определённой ветки и на основе этой информации создаёт контакты в другой ветке. Внутри одного домена (local.mycompany.ru) всё работает как надо, однако, если обращаться к поддомену (subdivision.local.mycompany.ru), то запрос возвращает только атрибуты с вкладки "Общие" пользователя, а остальные вкладки - нет. Возможно, дело в правах доступа? Никак не могу разобраться. Сам не программист и не знаток нюансов AD. Может, подскажете дельное что?
Скрипт запускается на контроллере домена.

Visual Basic
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
Option Explicit
On error resume next ' отключаем ошибки
 
' Объявляем переменные
Dim objRootDSE, strDNSDomain, strBase, strDomain
Dim adoCommand, adoConnection, objRS, strFilter, strAttributes, strQuery
Dim objExcel, strName, strPhone, strMail, strMobile, strCountry, strCity, strCompany, strDepartment, strTitle, strIpPhone
Dim strGivenName, strSN, strDisplayName, strItem
Dim objRoot, objOU, objDomain, objContact
Dim strDNS, strContainer, strContactName, strEmail
 
'==================================================================================
'Очищаем список контактов
'==================================================================================
' Определяем имя домена (к которому принадлежит машина, с которой запускается скрипт) 
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNS = objRootDSE.Get("defaultNamingContext")
 
' Подключаемся к AD
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
' Строка подключения (указываем нужные OU)
strBase = "<LDAP://OU=Subdivision,OU=Addressbook," & strDNS & ">"
 
' Удаляем из AD все контакты пользователей
strFilter = "(objectClass=contact)"' - все контакты в указанном OU!
strAttributes = "name,mail"
 
' Формируем строку запроса.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
 
' Выполним запрос.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 500
adoCommand.Properties("Timeout") = 307
adoCommand.Properties("Cache Results") = False
Set objRS = adoCommand.Execute
While not objRS.EOF
    strName = objRS.Fields("name").Value
    strMail = objRS.Fields("mail").value
    if strMail<>"" then
        Err.Clear
        'Удаляем контакт пользователя
        strContainer = "OU=Subdivision,OU=Addressbook" 'Название контейнера, в котором будем удалять контакты пользователей.
        strContactName = "cn=" & chr(34) & strName & chr(34) 'Название контакта
        Set objOU = GetObject("LDAP://"& strContainer & "," & strDNS)
        a = objOU.Delete ("Contact", strContactName)
    end if
    objRS.MoveNext
Wend
 
'Чистим память
Set objRS = Nothing
Set adoCommand = Nothing
Set adoConnection = Nothing
Set objOU = Nothing
 
'==================================================================================
'Создаём контакты из пользователей
'==================================================================================
' Определяем имя домена
strDomain = "OU=Пользователи,DC=Subdivision,DC=local,DC=mycompany,DC=ru"
Set objRootDSE = GetObject("GC://" & strDomain)
strDNSDomain = objRootDSE.Get("defaultNamingContext")
 
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
strBase = "<GC://" & strDomain & ">"
 
' Найти все активные учетные записи.
strFilter = "(&(objectCategory=person)(objectClass=user)(|(useraccountControl=66048)(useraccountcontrol=512)))" 
strAttributes = "name,mail,sn,displayname,givenname,telephoneNumber,mobile,ipPhone,department,title,company"
 
' Формируем строку запроса.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
 
' Выполним запрос.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 1000 
adoCommand.Properties("Timeout") = 307
adoCommand.Properties("Cache Results") = False
Set objRS = adoCommand.Execute
 
' Обработаем полученные данные из запроса
While Not objRS.EOF
    strName = objRS.Fields("name").Value
    strMail = objRS.Fields("mail").Value
    strCompany = objRS.Fields("company").Value
    strIpPhone = objRS.Fields("ipPhone").Value
    strPhone = objRS.Fields("telephoneNumber").Value
        'strPhone = Replace(strPhone,"-","") 'Откидываем тире из телефона
        'strPhone = Replace(strPhone," ","") 'Откидываем пробелы из телефона   
    strMobile = objRS.Fields("mobilePhone").Value
        'strMobile = Replace(strMobile,"-","") 'Откидываем тире из телефона
        'strMobile = Replace(strMobile," ","") 'Откидываем пробелы из телефона
    strDepartment = objRS.Fields("department").Value
    strTitle = objRS.Fields("title").Value
    strGivenName=objRS.Fields("givenname").Value
    strSN=objRS.Fields("sn").Value
    strDisplayName=objRS.Fields("displayname").Value
 
    'Заполним поля, если есть электронная почта
    if strMail<>"" then
        Err.Clear
        ' Создаём контакт из пользователя. Подготовка.
        strContainer = "OU=Subdivision,OU=Addressbook" 'Название контейнера, в который будем класть контакты, созданные из пользователей.
        strContactName = "cn=" & strName 'Название контакта
        strEmail = strMail 'Адрес электронной почты
 
        ' Создаём запрос к Active Directory
        Set objRoot = GetObject("LDAP://RootDSE")
        strDNS = objRoot.Get("defaultNamingContext")
        Set objDomain = GetObject("LDAP://" & strDNS)
 
        ' Создаём контакт из пользователя.
        Set objOU = GetObject("LDAP://"& strContainer & "," & strDNS)
        Set objContact = objOU.Create("contact", strContactName)
        objContact.Put "Mail", strEmail
        if strGivenName <> "" then objContact.Put "givenname", strGivenName
        if strSN <> "" then objContact.Put "sn", strSN
        if strDisplayName <> "" then objContact.Put "displayname", strDisplayName
        if strPhone <> "" then objContact.Put "telephoneNumber", strPhone
        if strOtherPhone <> "" then objContact.Put "otherTelephone", strOtherPhone
        if strMobile <> "" then objContact.Put "mobile", strMobile
        if strCompany <> "" then objContact.Put "company", strCompany
        if strDepartment <> "" then objContact.Put "department", strDepartment
        if strTitle <> "" then objContact.Put "title", strTitle
        objContact.SetInfo
    end if
 
    objRS.MoveNext
Wend
 
Set objRS = Nothing
Set adoCommand = Nothing
Set adoConnection = Nothing
Set objOU = Nothing
WScript.Quit
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2022, 12:59
Ответы с готовыми решениями:

Basic аутентификация на прокси сервере и Active Directory
Всем доброго времени суток! Недавно столкнулся с такой проблемой - есть железка (FortiGate), на ней включена опция &quot;Прокси...

LDAP запрос к active directory
Добрый день! У меня есть запрос к AD, что бы получить все учетки Select givenName,sn,mail,samaccountname,DisplayName,title from...

PowerShell запрос через Active Directory
Здравствуйте. Как прикрутить к данному запросу в PowerShell через ActiveDirectory 1) Description - описание группы 2)Табельный номер...

3
 Аватар для Rh2Dark
32 / 32 / 0
Регистрация: 05.11.2020
Сообщений: 102
07.03.2022, 18:49
Во первых, зачем "On error resume next"? Возможно там ошибка, но вы её не видите, т.к. отключили обработку ошибок. Попробуйте включить и прогнать скрипт.
Во вторых, попробуйте использовать везде в строке запроса "<GC://" вместо "<LDAP://". "<LDAP://" работает только в родном домене, тогда как "<GC://" и в родном и в кроссдоменах.

Добавлено через 20 минут
Добавлю: в код ваш сильно не вникал потому как очень трудно читать неотформатированный код. Возможно там внутри что-то не так. Чтобы отформатировать выделите текст кода и нажмите кнопку "BASIC" на панели инструментов редактирования вашего сообщения, потом жмите кнопку отправки ответа.
1
1 / 1 / 0
Регистрация: 01.03.2022
Сообщений: 3
09.03.2022, 10:22  [ТС]
LDAP в этом коде я использую только при обращении внутри одного домена, для запроса в другой домен использую GC. Попробую сегодня везде GC использовать.

Насчёт "On error resume next" - без этой опции будет выдавать ошибки не критичные для работы, например, ошибка при создании контакта, который уже существует, или при запросе к AD про "отсутствие чего-то там в кэше" (точно не помню).

Код перевыложу в соответствии с вашим замечанием про форматирование =)

Visual Basic
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
Option Explicit
On error resume next ' отключаем ошибки
 
' Объявляем переменные
Dim objRootDSE, strDNSDomain, strBase, strDomain
Dim adoCommand, adoConnection, objRS, strFilter, strAttributes, strQuery
Dim objExcel, strName, strPhone, strMail, strMobile, strCountry, strCity, strCompany, strDepartment, strTitle, strIpPhone
Dim strGivenName, strSN, strDisplayName, strItem
Dim objRoot, objOU, objDomain, objContact
Dim strDNS, strContainer, strContactName, strEmail
 
'==================================================================================
'Очищаем список контактов
'==================================================================================
' Определяем имя домена (к которому принадлежит машина, с которой запускается скрипт) 
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNS = objRootDSE.Get("defaultNamingContext")
 
' Подключаемся к AD
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
' Строка подключения (указываем нужные OU)
strBase = "<LDAP://OU=Subdivision,OU=Addressbook," & strDNS & ">"
 
' Удаляем из AD все контакты пользователей
strFilter = "(objectClass=contact)"' - все контакты в указанном OU!
strAttributes = "name,mail"
 
' Формируем строку запроса.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
 
' Выполним запрос.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 500
adoCommand.Properties("Timeout") = 307
adoCommand.Properties("Cache Results") = False
Set objRS = adoCommand.Execute
While not objRS.EOF
    strName = objRS.Fields("name").Value
    strMail = objRS.Fields("mail").value
    if strMail<>"" then
        Err.Clear
        'Удаляем контакт пользователя
        strContainer = "OU=Subdivision,OU=Addressbook" 'Название контейнера, в котором будем удалять контакты пользователей.
        strContactName = "cn=" & chr(34) & strName & chr(34) 'Название контакта
        Set objOU = GetObject("LDAP://"& strContainer & "," & strDNS)
        a = objOU.Delete ("Contact", strContactName)
    end if
    objRS.MoveNext
Wend
 
'Чистим память
Set objRS = Nothing
Set adoCommand = Nothing
Set adoConnection = Nothing
Set objOU = Nothing
 
'==================================================================================
'Создаём контакты из пользователей
'==================================================================================
' Определяем имя домена
strDomain = "OU=Пользователи,DC=Subdivision,DC=local,DC=mycompany,DC=ru"
Set objRootDSE = GetObject("GC://" & strDomain)
strDNSDomain = objRootDSE.Get("defaultNamingContext")
 
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
strBase = "<GC://" & strDomain & ">"
 
' Найти все активные учетные записи.
strFilter = "(&(objectCategory=person)(objectClass=user)(|(useraccountControl=66048)(useraccountcontrol=512)))" 
strAttributes = "name,mail,sn,displayname,givenname,telephoneNumber,mobile,ipPhone,department,title,company"
 
' Формируем строку запроса.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
 
' Выполним запрос.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 1000 
adoCommand.Properties("Timeout") = 307
adoCommand.Properties("Cache Results") = False
Set objRS = adoCommand.Execute
 
' Обработаем полученные данные из запроса
While Not objRS.EOF
    strName = objRS.Fields("name").Value
    strMail = objRS.Fields("mail").Value
    strCompany = objRS.Fields("company").Value
    strIpPhone = objRS.Fields("ipPhone").Value
    strPhone = objRS.Fields("telephoneNumber").Value
        'strPhone = Replace(strPhone,"-","") 'Откидываем тире из телефона
        'strPhone = Replace(strPhone," ","") 'Откидываем пробелы из телефона   
    strMobile = objRS.Fields("mobilePhone").Value
        'strMobile = Replace(strMobile,"-","") 'Откидываем тире из телефона
        'strMobile = Replace(strMobile," ","") 'Откидываем пробелы из телефона
    strDepartment = objRS.Fields("department").Value
    strTitle = objRS.Fields("title").Value
    strGivenName=objRS.Fields("givenname").Value
    strSN=objRS.Fields("sn").Value
    strDisplayName=objRS.Fields("displayname").Value
 
    'Заполним поля, если есть электронная почта
    if strMail<>"" then
        Err.Clear
        ' Создаём контакт из пользователя. Подготовка.
        strContainer = "OU=Subdivision,OU=Addressbook" 'Название контейнера, в который будем класть контакты, созданные из пользователей.
        strContactName = "cn=" & strName 'Название контакта
        strEmail = strMail 'Адрес электронной почты
 
        ' Создаём запрос к Active Directory
        Set objRoot = GetObject("LDAP://RootDSE")
        strDNS = objRoot.Get("defaultNamingContext")
        Set objDomain = GetObject("LDAP://" & strDNS)
 
        ' Создаём контакт из пользователя.
        Set objOU = GetObject("LDAP://"& strContainer & "," & strDNS)
        Set objContact = objOU.Create("contact", strContactName)
        objContact.Put "Mail", strEmail
        if strGivenName <> "" then objContact.Put "givenname", strGivenName
        if strSN <> "" then objContact.Put "sn", strSN
        if strDisplayName <> "" then objContact.Put "displayname", strDisplayName
        if strPhone <> "" then objContact.Put "telephoneNumber", strPhone
        if strOtherPhone <> "" then objContact.Put "otherTelephone", strOtherPhone
        if strMobile <> "" then objContact.Put "mobile", strMobile
        if strCompany <> "" then objContact.Put "company", strCompany
        if strDepartment <> "" then objContact.Put "department", strDepartment
        if strTitle <> "" then objContact.Put "title", strTitle
        objContact.SetInfo
    end if
 
    objRS.MoveNext
Wend
 
Set objRS = Nothing
Set adoCommand = Nothing
Set adoConnection = Nothing
Set objOU = Nothing
WScript.Quit
Добавлено через 1 час 20 минут
При использовании GC везде, скрипт не создаёт ни одного контакта. А так c LDAP создаёт, так как создание контактов идёт внутри одного домена, а сбор информации - кроссдоменный.
0
1 / 1 / 0
Регистрация: 01.03.2022
Сообщений: 3
15.03.2022, 08:20  [ТС]
Проблему решил методом научного тыка.
Если кому-то будет полезно: помогло записать имя домена в виде subdivision.local.mycompany.ru вместо distinguished name (строка 69 кода ниже).

Код получился такой. Менее универсальный, но немного короче.
VB.NET
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
Option Explicit
 
' Объявляем переменные
Dim objRootDSE, strDNSDomain, strBase, strDNS
Dim adoCommand, adoConnection, objRS, strFilter, strAttributes, strQuery
Dim objRoot, objOU, objDomain, objContact
Dim strContainer, strContactName, strEmail
Dim strName, strPhone, strMail, strMobile, strCompany, strDepartment, strTitle, strIpPhone, strGivenName, strSN, strDisplayName, strItem
Dim a
 
'===================================================================
'Очищаем список контактов
'===================================================================
' Определяем имя домена (к которому принадлежит машина, с которой запускается скрипт) 
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNS = objRootDSE.Get("defaultNamingContext")
 
' Подключаемся к AD
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
' Строка подключения (указываем нужные OU)
strBase = "<LDAP://OU=Subdivision,OU=Addressbook," & strDNS & ">"
 
' Удаляем из AD все контакты пользователей
strFilter = "(objectClass=contact)"' - все контакты в указанном OU!
' В переменной strAttributes обязательно перечисляем список атрибутов, по которым выбираются контакты. Без них работать не будет.
strAttributes = "name,mail"
 
' Формируем строку запроса.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
 
' Выполним запрос.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 500
adoCommand.Properties("Timeout") = 307
adoCommand.Properties("Cache Results") = False
Set objRS = adoCommand.Execute
While not objRS.EOF
    strName = objRS.Fields("name").Value
    strMail = objRS.Fields("mail").value
    if strMail<>"" then
        Err.Clear
        'Удаляем контакт пользователя
        strContainer = "OU=Subdivision,OU=Addressbook" 'Название контейнера, в котором будем удалять контакты пользователей.
        strContactName = "cn=" & chr(34) & strName & chr(34) 'Название контакта
        Set objOU = GetObject("LDAP://"& strContainer & "," & strDNS)
        a = objOU.Delete ("Contact", strContactName)
    end if
    objRS.MoveNext
Wend
 
'Чистим память
Set objRS = Nothing
Set adoCommand = Nothing
Set adoConnection = Nothing
Set objOU = Nothing
 
 
'===============================================================
'Создаём контакты из пользователей
'===============================================================
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Open "Provider=ADsDSOObject;"
Set adoCommand.ActiveConnection = adoConnection
strBase = "<LDAP://Subdivision.local.mycompany.ru>" 'Вся загвоздка оказалась в этой строке
 
strFilter = "(&(objectCategory=person)(|(useraccountControl=66048)(useraccountcontrol=512)))" 'useraccountcontrol=512 - включенные пользователи!
' В переменной strAttributes обязательно перечисляем список атрибутов, которые переносятся, иначе работать не будет!
strAttributes = "name,mail,sn,displayname,givenname,ipPhone,telephoneNumber,mobile,title,department,company" 
 
 
' Формируем строку запроса.
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
 
' Выполним запрос.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 1000 ' Максимальное количество пользователей, которое получит в ответе запрос к AD!
adoCommand.Properties("Timeout") = 307
Set objRS = adoCommand.Execute
 
' Обработаем полученные данные из запроса
While Not objRS.EOF
    strName = objRS.Fields("name").Value
    strMail = objRS.Fields("mail").Value
    strGivenName = objRS.Fields("givenname").Value
    strSN = objRS.Fields("sn").Value
    strDisplayName = objRS.Fields("displayname").Value
    strIpPhone = objRS.Fields("ipPhone").Value
    strPhone = objRS.Fields("telephoneNumber").Value
        'strPhone = Replace(strPhone,"-","") 'Откидываем тире из телефона
        'strPhone = Replace(strPhone," ","") 'Откидываем пробелы из телефона   
    strMobile = objRS.Fields("mobile").Value
        'strMobile = Replace(strMobile,"-","") 'Откидываем тире из телефона
        'strMobile = Replace(strMobile," ","") 'Откидываем пробелы из телефона
    strTitle = objRS.Fields("title").Value
    strDepartment = objRS.Fields("department").Value
    strCompany = objRS.Fields("company").Value
 
    'Заполним поля, если есть электронная почта
    if strMail<>"" then
        Err.Clear
        ' Создаём контакт из пользователя. Подготовка.
        strContainer = "OU=Subdivision,OU=Addressbook" 'Название контейнера, в который будем класть контакты, созданные из пользователей.
        strContactName = "cn=" & strName 'Название контакта
        strEmail = strMail 'Адрес электронной почты
 
        ' Создаём запрос к Active Directory
        Set objRoot = GetObject("LDAP://RootDSE")
        strDNS = objRoot.Get("defaultNamingContext")
 
        ' Создаём контакт из пользователя.
        Set objOU = GetObject("LDAP://"& strContainer & "," & strDNS)
        Set objContact = objOU.Create("contact", strContactName)
        objContact.Put "Mail", strEmail
        if strGivenName <> "" then objContact.Put "givenname", strGivenName
        if strSN <> "" then objContact.Put "sn", strSN
        if strDisplayName <> "" then objContact.Put "displayname", strDisplayName
        if strPhone <> "" then objContact.Put "telephoneNumber", strPhone
        if strMobile <> "" then objContact.Put "mobile", strMobile
        if strIpPhone <> "" then objContact.Put "ipPhone", strIpPhone
        if strTitle <> "" then objContact.Put "title", strTitle
        if strDepartment <> "" then objContact.Put "department", strDepartment
        if strCompany <> "" then objContact.Put "company", strCompany
        
        objContact.SetInfo 'контакт успешно создан! 
    end if
 
    objRS.MoveNext
Wend
 
Чистим память и выходим из скрипта!
Set objRS = Nothing
Set adoCommand = Nothing
Set adoConnection = Nothing
Set objOU = Nothing
WScript.Quit
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2022, 08:20
Помогаю со студенческими работами здесь

Запрос к active directory через ADO
Добрый день! У меня есть запрос к AD через LDAP, что бы получить все учетки SELECT...

Интеграция Lotus Domino Directory C Active Directory
Добрый день, уважаемые администраторы, программисты Lotus Domino! Моя задача заключается в следующем - нужно интегрировать Lotus...

Visual Studio 2017 & Visual Basic vs WebRequest (Веб запрос)
Эта конструкция работает, создает и получает ответ с web сервера, вопрос как быть убежденным в том, что этот запрос имеет ssl шифрование?...

Ms active directory -> <-ibm domino directory
Привет всем! :banghead: Начали разработку тонкого клиента СЭД на Xpages но встал вопрос о авторизации сотрудников через Active...

Lotus\domino Directory & Active Directory
Добрый день, столкнулся с такой проблемой. Поставил сервер Domino на win2k8R2. Сервак является и контролером домена от майкрософт....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru