2011-02-14 4 views
0

Я работаю над импортом групп и пользователей из активного каталога с использованием SQL-сервера. Я нашел следующий код, чтобы вытащить обе группы и пользователей.Получить описание из активного каталога

CREATE TABLE ##Groups (CN VARCHAR(128), DN VARCHAR(1024), Email VARCHAR(128), ADSPath VARCHAR(1024)); 
CREATE TABLE ##Users (DistributionGroup VARCHAR(128), FirstName VARCHAR(50), LastName VARCHAR(50), EmailAddress VARCHAR(128)); 

DECLARE @sql VARCHAR(1024) 

SET @sql = 'INSERT INTO ##Groups (CN, DN, Email, ADSPath) SELECT CN, distinguishedName DN, mail Email, ADSPath FROM OpenQuery(ADSI, ''<LDAP://controller.domain.com:389/DC=domain,DC=com>;(&(objectClass=Group));cn, distinguishedName, mail, ADSPath;subtree'') ORDER BY distinguishedName'; 
EXEC(@sql); 

DECLARE @CN VARCHAR(128) 
DECLARE @DN VARCHAR(1024) 

SELECT TOP 1 @CN = CN, @DN = DN FROM ##Groups 

WHILE EXISTS(SELECT DN FROM ##Groups WHERE DN > @DN) 
BEGIN 

     SET @sql = 'INSERT INTO ##Users (DistributionGroup, Firstname, LastName, EmailAddress) SELECT '''[email protected]+''' [Distribution Group], ISNULL(givenName, '''') FirstName, ISNULL(sn, '''') LastName, mail EmailAddress FROM OpenQuery(ADSI, ''<LDAP://controller.domain.com:389/DC=domain,DC=com>;(&(objectClass=User)(memberOf='[email protected]+'));givenName, sn, mail;subtree'')'; 
     EXEC(@sql) 

     SELECT TOP 1 @CN = CN, @DN = DN FROM ##Groups WHERE DN > @DN 
END 

SELECT * FROM ##Groups; 
SELECT * FROM ##Users; 

DROP TABLE ##Groups; 
DROP TABLE ##Users; 

Это работает очень красиво. Теперь я хотел бы вывести описание для групп, но я не могу понять, что называется полем. Помогите?

ответ

5

Описание для групп в AD хранится в атрибуте .

Ссылка: Microsoft AD Schema Docs

EDIT: кажется, что вы не можете на самом деле вытащить атрибут описания в использовании ADSI связанного сервера в SQL, потому что это многозначный атрибут а. Для альтернативного способа вытащить данные из AD для импорта в SQL-сервер см. my answer to this question.

+0

ok. Я добавляю описание запроса и получаю эту ошибку: Msg 7341, Level 16, State 2, Line 1 Не удается получить значение текущей строки столбца «[ADSDSOObject] .description» от поставщика OLE DB «ADSDSOObject» для связанного сервера «ADSI ». Не удалось преобразовать значение данных из-за причин, отличных от несоответствия знака или переполнения. – DForck42

+1

@ DForck42: вы, вероятно, не можете получить его через искалеченного поставщика OLE DB, поскольку «описание» является потенциально многозначным атрибутом. Я не думаю, что вы можете что-то сделать с этим, к сожалению .... –

+0

http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/7026e0b3-c20d-4e19-a017-926a23df60d7 / –

Смежные вопросы