Лучший отвечающий
Выборка пользователей в группе AD

Вопрос
-
Доброго времени суток!!
Сталкнулся со следующей проблемой. Есть AD на WIN2003. Есть група безопасности, в которой около 2500 пользователей. Делаю выборку скриптом пользователей из группы получается ровно 1500 пользователей. Ниже листинг скрипта
'Option Explicit
Dim strMember
Dim arrMemberOf
Const ADS_SCOPE_SUBTREE = 2
'********************************LOG_FILE********************************************************
Set fso = CreateObject("Scripting.FileSystemObject")
Set LogFile = fso.OpenTextFile("c:\sub\log.txt", 8, True)
LogFile.WriteLine "********************************************************************************"
LogFile.WriteLine now()& " Начало работы скрипта "Set fso1 = CreateObject("Scripting.FileSystemObject")
Set LogFile1 = fso1.OpenTextFile("c:\sub\log1.txt", 8, True)
LogFile1.WriteLine "********************************************************************************"
LogFile1.WriteLine now()& " Начало работы скрипта "
'********************************Log_FILE*********************************************************
Set MyDB = CreateObject("ADODB.Connection")
MyDB.ConnectionTimeout = 30
MyDB.CommandTimeout = 30
MystrDB = "Driver={MySQL ODBC 5.1 Driver};"
MyDB.Open MystrDB
'********************************LOG_FILE********************************************************
Set rs_delete=CreateObject("ADODB.Recordset")
SQL_USERS_delete="DELETE FROM ad_list_table"
Set rs_delete = MyDB.Execute(SQL_USERS_delete)
Set rs_delete=Nothing
Set objCmd = CreateObject("ADODB.Command")
Set objCmd.ActiveConnection = MyDB
Set rs_insert=CreateObject("ADODB.Recordset")
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 3000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Cache Results") = False
objCommand.Properties("Timeout") = 60
objCommand.CommandText = "SELECT name, mail, distinguishedName FROM 'LDAP://OU' WHERE objectCategory='group'"
Set objRecordSet = objCommand.Execute
Do Until objRecordSet.EOF
i=i+1
st=""
Name=objRecordSet.Fields("name").Value
mail=objRecordSet.Fields("mail").Value
patch=objRecordSet.Fields("distinguishedName").Value
LogFile1.WriteLine now()&";"& patch &";"
Set objGroup = GetObject ("LDAP://"& patch)
objGroup.getInfo
arrMemberOf = objGroup.GetEx("member")
For Each strMember in arrMemberOf
Set objuser = GetObject ("LDAP://"& strMember)
objuser.getInfo
mail1 = objuser.Get("mail")
LogFile.WriteLine now()&";"& name &";"& mail &";"& mail1 &";"
SQL_STR_SET= "INSERT INTO ad_list_table (list_name,list_mail,list_user) VALUES ('"&name&"','"& mail &"','"& mail1 &"')"
objCmd.CommandText=SQL_STR_SET
objCmd.Execute
Set objUser = Nothing
Next
objRecordSet.MoveNext
LoopПолные пути в листинге, я заведомо убрал, скрипт работает без вопросов, только проблема с "большой" групппой.
Не могу понять где может быть ограничение?
6 декабря 2011 г. 14:00
Ответы
-
Большое спасибо за ссылки. Нашёл в них решение проблемы.
Есть такой параметр MaxValRange в политиках LDAP, который означает "Максимальное количество значений, которые могут быть извлечены из многозначный атрибут в одном запросе поиска (1500 значений). Эта политика доступна только в Windows Server 2003 и Windows Server 2008."(перевод Google). В LDAP стояло значение по умолчанию 0, изменил на 3000 и всё заработало.
- Помечено в качестве ответа schrek 8 декабря 2011 г. 6:31
8 декабря 2011 г. 6:31
Все ответы
-
Есть довольно интересная статья на данную тему: http://www.osp.ru/win2000/2010/01/13001643/
Прямого ответа на ваш вопрос она не дает, но...
И ещё. По-моему по умолчанию максимально возможное значение параметра PageSize = 1000. (http://technet.microsoft.com/ru-ru/library/cc770976(WS.10).aspx) Соответственно ваше значение может просто игнорироваться.
http://support.microsoft.com/kb/315071- Изменено Evgenii Alekseev 6 декабря 2011 г. 16:41
6 декабря 2011 г. 16:25 -
Большое спасибо за ссылки. Нашёл в них решение проблемы.
Есть такой параметр MaxValRange в политиках LDAP, который означает "Максимальное количество значений, которые могут быть извлечены из многозначный атрибут в одном запросе поиска (1500 значений). Эта политика доступна только в Windows Server 2003 и Windows Server 2008."(перевод Google). В LDAP стояло значение по умолчанию 0, изменил на 3000 и всё заработало.
- Помечено в качестве ответа schrek 8 декабря 2011 г. 6:31
8 декабря 2011 г. 6:31