Форум сайта python.su
Для получения списка пользователей из 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()
Офлайн
Ошибка не в вашем коде - она внутри pywintypes. Скорее всего вы пытаетесть ‘впихнуть’ ему слишком много данных.
Что если брать не всех сразу, а по-одному?
Отредактировано (Сен. 6, 2011 16:55:37)
Офлайн
а где этот серв стоит что там 1к юзверей в ад? просто интересно…
Офлайн
Ковдорский ГОК
Офлайн
Переписал код для последовательного чтения из 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()
Офлайн