SQL 脚本 - 从 AD 用户的属性中获取 OU 的 ObjectGuid

时间:2020-12-29 13:36:34

标签: sql-server active-directory

我想将组织单位 guid (filtering objectClass = ''organizationalunit'') 加入用户的组织 (filtering objectClass = ''User'')... 我没有看到匹配代码(来自 AD 的用户属性中的 OU guid)以匹配我拥有所有 OU objectClass = ''organizationalunit'') 的数据集

-- dataset to get all OUs --I have an OU ObjectGUId here! it looks ok.
select *
FROM            OPENQUERY([ADSI], 
                         'SELECT 
                        Name, ADsPath,objectguid , parentguid       
    FROM ''myLDAP path'' 

    WHERE 
            objectClass = ''organizationalunit''
        
            ')
                          AS t

-- dataset to get users attributes--I do not see an OU ObjectGUId related to users OU structure
-- I checked here but no luck http://www.kouti.com/tables/userattributes.htm
select *
FROM            OPENQUERY([ADSI], 
                         'SELECT 
            userPrincipalName,ADsPath,
            Name, 
            displayName,
            objectCategory,
            SN, 
            givenName,
            ST, 
            SamAccountName, 
            DistinguishedName,
            ObjectGUID, 
            physicalDeliveryOfficeName,
            department,
            ObjectSID, 
            mail    ,preferredOU    , ou ,o
    FROM ''myLDAP path'' 

    WHERE 
            objectClass = ''User''
        
            ')

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您希望加入用户所在单位部门的用户列表。

Active Directory 是一个树状结构,而distinguishedName 是描述对象所在位置的路径。

因此,要从一个对象移动到该对象所在的容器,您需要移除以逗号分隔的 distinctName 的第一个元素。

所以具有distinguishedName cn=user,ou=container,dc=domain,dc=local 的用户驻留在组织单位ou=container,dc=domain,dc=local

因此,解决方案或多或少类似于来自用户的 SELECT RIGHT(distinguishedName, CHARINDEX(",", distingishedName) + 1),然后您将其加入到组织单位 distinctName 中。

对象不是按照您建议的方式通过 objectGUID 链接的。

很抱歉,我无法为您提供直接可用的 SQL 代码,您可能比我更擅长这个 ;-)

相关问题