1

我在这里疯了,我真的很感激一些帮助!只是我想使用 DirectoryEntry 类从 Active Directory 中获取用户名或任何内容。

我使用了 userprinciple 并且效果很好,但是我需要获取的属性(用户的经理)仅在 DirectoryEntry 中可用。

我的问题是,我在网上看了很多,我从那里得到了代码,但由于某种原因它从来没有用过,总是返回 Null。这是一个例子:

public static DirectoryEntry GetUser(string UserName)
{
    //create an instance of the DirectoryEntry
    DirectoryEntry de = new DirectoryEntry("LDAP://" + "OU=AnotherOU,OU=xx,OU=Testvironments,DC=abc,DC=local");

    //create instance fo the direcory searcher
    DirectorySearcher deSearch = new DirectorySearcher(de);

    deSearch.SearchRoot = de;
    //set the search filter
    deSearch.Filter = "(&(objectCategory=user)(cn=" + UserName + "))";
    //deSearch.SearchScope = SearchScope.Subtree;

    //find the first instance
    SearchResult results = deSearch.FindOne();

    //if found then return, otherwise return Null
    if (results != null)
    {
        //de= new DirectoryEntry(results.Path,ADAdminUser,ADAdminPassword,AuthenticationTypes.Secure);
        //if so then return the DirectoryEntry object
        return results.GetDirectoryEntry();
    }
    else
    {
        return null;
    }
}

我不知道为什么这段代码返回 null。

提前致谢。

4

2 回答 2

2

你可以这样尝试

//create instance for directory entry
DirectoryEntry de = new DirectoryEntry("LDAP://" + "OU=AnotherOU,OU=xx,OU=Testvironments,DC=abc,DC=local");

//create instance fo the directory searcher
DirectorySearcher deSearch = new DirectorySearcher(de );;

//set the search filter
deSearch.Filter = "(&(objectClass=user)(|(SAMAccountName=" + UserName+ ")(givenName=" + UserName+ ")(name=" + UserName+ ")(SN=" + UserName+ "))";

//find the first instance
SearchResult results = deSearch.FindOne();

//if found then return, otherwise return Null
if (results != null)
{
    //The desired property you want , you can extract in this way.
   DomainName = results .Properties["SamAccountName"][0].ToString();
   return domainName
}
else
{
    return null;
}

希望这是您正在寻找的。

于 2012-09-27T14:36:48.657 回答
0

您想要cnsamAccountname或属性吗displayName?是传统 (NT 4.0) 样式的用户名,通常是名字加姓氏,格式类似于电子邮件地址 (user@domain.name)。userPrincipalNamesamAccountNamedisplayNameuserPrincipalName

无论哪种方式,如果您想测试不同的查询,请使用交互式 LDAP 查询工具,如ldp.exe。这可能比在代码中尝试它们要容易得多。

于 2012-09-27T14:31:56.350 回答