列出Active Directory中的所有UPN后缀

时间:2018-02-21 21:57:28

标签: c# active-directory

我试图使用C#从AD获取所有upnsuffix的列表。

我尝试了这个没有成功

public static List<string> GetuPNSuffixes()
{
    DirectoryEntry partitions = new DirectoryEntry("LDAP://xxxxx.com/CN=Partitions,CN=Configuration,DC=xxxxx,DC=com", "user", "pass");
    DirectorySearcher searcher = new DirectorySearcher(partitions);
    searcher.PropertiesToLoad.Add("uPNSuffixes");

    List<string> suffixes = new List<string>();

    foreach (SearchResult sr in searcher.FindAll())
    {
        foreach (string pn in sr.Properties.PropertyNames)
        {
            if (pn == "upnsuffixes")
            {
                suffixes.Add(sr.Properties[pn].ToString());
            }
        }
    }

    return suffixes;
}

这给了我一个System.DirectoryServices.DirectoryServicesCOMException: There is no such object on the server错误。我猜是因为它不喜欢我的ldap字符串。我正在验证的帐户是域管理员,我在其他地方使用类似的代码,因此登录肯定是正确的。也许CN=Partitions,CN=Configuration部分错了?

我希望在没有嵌套循环的情况下有更好的方法。只是想获得一个upnsuffix的列表。

还试过这个并得到了相同的DirectoryServicesCOMException错误:

public static string GetuPNSuffixes()
{
    DirectoryEntry entry = new DirectoryEntry("LDAP://xxxxx.com/CN=Partitions,CN=Configuration,DC=xxxxx,DC=com", "user", "pass");

    return entry.Properties["upnSuffixes"].ToString();
}

所以我想我在那里用LDAP字符串做错了。

1 个答案:

答案 0 :(得分:0)

能够用这个拉出UPN后缀列表:

public static List<string> GetuPNSuffixes()
{
    //add root domain
    List<string> suffixList = new List<string>();
    suffixList.Add(Domain.GetCurrentDomain().Name);

    //get the list of alternate domains
    DirectoryEntry rootDSE = new DirectoryEntry(@"LDAP://RootDSE");
    string context = rootDSE.Properties["configurationNamingContext"].Value.ToString();
    DirectoryEntry partition = new DirectoryEntry(@"LDAP://CN=Partitions," + context);

    foreach (string suffix in partition.Properties["uPNSuffixes"])
    {
        suffixList.Add(suffix);
    }

    return suffixList;
}