2011-02-14 85 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