我正在使用 C# 和 .NET Framework 4.0 开发一个库。
我想检索所有活动目录用户,它效果很好。但我的问题是,如果我在另一个域上运行我的程序,我必须更改此设置:
private static string ldapPath = "LDAP://DC=ic,DC=local";
并使用新域的新数据重新编译它。
有什么办法可以得到"LDAP://DC=ic,DC=local"
动态地?
几周前我也做了同样的事情。我用的是System.DirectoryServices.ActiveDirectory
库,并使用了Domain
and DomainController
对象来找到您正在寻找的东西。
这是我正在使用的代码:
public static class DomainManager
{
static DomainManager()
{
Domain domain = null;
DomainController domainController = null;
try
{
domain = Domain.GetCurrentDomain();
DomainName = domain.Name;
domainController = domain.PdcRoleOwner;
DomainControllerName = domainController.Name.Split('.')[0];
ComputerName = Environment.MachineName;
}
finally
{
if (domain != null)
domain.Dispose();
if (domainController != null)
domainController.Dispose();
}
}
public static string DomainControllerName { get; private set; }
public static string ComputerName { get; private set; }
public static string DomainName { get; private set; }
public static string DomainPath
{
get
{
bool bFirst = true;
StringBuilder sbReturn = new StringBuilder(200);
string[] strlstDc = DomainName.Split('.');
foreach (string strDc in strlstDc)
{
if (bFirst)
{
sbReturn.Append("DC=");
bFirst = false;
}
else
sbReturn.Append(",DC=");
sbReturn.Append(strDc);
}
return sbReturn.ToString();
}
}
public static string RootPath
{
get
{
return string.Format("LDAP://{0}/{1}", DomainName, DomainPath);
}
}
}
然后,你只需调用DomainManager.DomainPath
,一切都初始化一次(它避免资源泄漏)或DomainName
等等。或者RootPath,这个对于初始化root很有用DirectoryEntry
for DirectorySearcher
.
我希望这能回答您的问题并能有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)