动态获取当前的LDAP路径

Van*_*nel 4 c# windows active-directory

我正在使用C#和.NET Framework 4.0开发一个库。

我想检索所有活动目录用户,并且效果很好。但是我的问题是,如果我在另一个域上运行程序,则必须更改此设置:

private static string ldapPath = "LDAP://DC=ic,DC=local";
Run Code Online (Sandbox Code Playgroud)

并使用新数据重新编译该新域。

有什么办法可以"LDAP://DC=ic,DC=local"动态获取吗?

Nat*_* B. 5

几周前我做了完全一样的事情。我使用了该System.DirectoryServices.ActiveDirectory库,并使用了DomainDomainController对象来查找所需的内容。

这是我正在使用的代码:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您只需调用DomainManager.DomainPath,所有内容都会初始化一次(这样可以避免资源泄漏)DomainName等等。或者ROOTPATH,这是非常有用的初始化根DirectoryEntryDirectorySearcher

我希望这能回答您的问题并能为您提供帮助。