Найти - Пользователи
Полная версия: Список пользователей из AD
Начало » Python для новичков » Список пользователей из AD
1
Rakdos
Для получения списка пользователей из AD решил использовать следующий код:

import codecs, sys
import win32com.client
count=1
conn = win32com.client.Dispatch("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open("ADs Provider")
query = "SELECT ADsPath FROM 'LDAP://MyDamain.ru' WHERE objectClass='user' AND objectCategory='person'"
rs = conn.Execute(query)[0]
while not rs.EOF:
obj = win32com.client.GetObject(rs.Fields(0).Value)
print (obj.Class, obj.Name, count)
rs.MoveNext()
count+=1
conn.Close()
Проблема в том, что после 1000-го юзера скрипт отваливается с ошибкой:

Traceback (most recent call last):
File “C:\Users\Desktop\test.py”, line 12, in <module>
rs.MoveNext()
File “<COMObject Execute>”, line 2, in MoveNext
pywintypes.com_error: (-2147352567, ‘Ошибка.’, (0, ‘Provider’, ‘Для этого запроса превышен предел размера.’, None, 1240640, -2147016669), None)


Т.к. Питоном занялся недавно, пока не могу понять в какую сторону копать. Пожалуйста помогите советом
s0rg
Ошибка не в вашем коде - она внутри pywintypes. Скорее всего вы пытаетесть ‘впихнуть’ ему слишком много данных.
Что если брать не всех сразу, а по-одному?
InPython
а где этот серв стоит что там 1к юзверей в ад? просто интересно…
Rakdos
Ковдорский ГОК
Rakdos
Переписал код для последовательного чтения из AD для каждого OU отдельно:
import codecs, sys
import win32com.client

#функция получает из AD список пользователей одного OU и
#записывает его в файл. OU передаeтся в качестве аргумента
def queryAD(OU):
conn = win32com.client.Dispatch("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open("ADs Provider")
query = "SELECT ADsPath FROM '"+OU+"' WHERE objectClass='user' and objectCategory='person'"
rs = conn.Execute(query)[0]
while not rs.EOF:
obj = win32com.client.GetObject(rs.Fields(0).Value)
print (obj.Name[3:], file=file)
rs.MoveNext()
conn.Close()

#Открываем файл для сохранения результатов
file=open('user.txt','a')

#В цикле считываем из файла OUpath.txt пути к OU
#и передаем их функции для обработки
for x in open('OUpath.txt'):
queryAD(x[:-1])

#Закрываем файл
file.close()
В таком виде все отлично работает. Единственный недостаток - пришлось ручками пути OU в файл забивать
Спасибо s0rg за подсказку :D
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB