我试图使用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字符串做错了。
答案 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;
}