2011-02-14 89 views
0

我正在使用sql server从活动目录导入组和用户。我找到了下面的代码来拉出组和用户。从活动目录获取说明

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

编辑:看来,你不能真正拉在SQL中使用ADSI链接服务器,因为它是一个多值属性的描述属性。有关从AD中提取数据以便导入SQL服务器的另一种方法,请参阅my answer to this question

+0

好的。我向查询添加说明并得到此错误:消息7341,级别16,状态2,行1 无法从链接服务器“ADSIDSOObject”的ADLEDS提供程序“ADSDSOObject] .description”列中获取当前行值”。由于符号不匹配或溢出以外的原因,无法转换数据值。 – DForck42 2011-02-14 20:10:29