繁体   English   中英

如何从Active Directory检索用户的登录名?

[英]How to retrieve login name of a user from Active Directory?

我想从Active Directory检索用户的登录名。

例如,名称是'Jan Van der Linden'在将此名称作为参数后,我必须获取他的登录名作为回报,例如jvdlinden

由于您使用的是.NET 3.5及更高版本,因此您应该查看System.DirectoryServices.AccountManagement (S.DS.AM)命名空间。 在这里阅读所有相关内容:

管理.NET Framework 3.5中的目录安全性主体

基本上,您可以定义域上下文并轻松查找AD中的用户和/或组:

public string GetLoginName(string userName)
{
  // set up domain context
  PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

  // find user by name
  UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName);

  if(user != null)
       return user.SamAccountName;
  else
       return string.Empty;
}

新的S.DS.AM使得在AD中使用用户和群组变得非常容易:

检查此链接是否需要代码snipple

验证AD-LDAP USer

using (DirectoryEntry entry = new DirectoryEntry())
        {
            entry.Username = "DOMAIN\\LOGINNAME";
            entry.Password = "PASSWORD";
            DirectorySearcher searcher = new DirectorySearcher(entry);
            searcher.Filter = "(objectclass=user)";
            try
            {
                searcher.FindOne();
                {
                    //Add Your Code if user Found..
                }
            }
            catch (COMException ex)
            {
                if (ex.ErrorCode == -2147023570)
                {
                    ex.Message.ToString();
                    // Login or password is incorrect 
                }
            }
        }

使用.net库,您可以使用以下代码从活动目录获取用户名或任何信息

using System.Management;
using System.Management.Instrumentation;
using System.Runtime.InteropServices;
using System.DirectoryServices;

ManagementObjectSearcher Usersearcher = new ManagementObjectSearcher("Select * From Win32_ComputerSystem Where (Name LIKE 'ws%' or Name LIKE 'it%')"); 
            ManagementObjectCollection Usercollection = Usersearcher.Get(); 
            string[] sep = { "\\" };
            string[] UserNameDomain = Usercollection.Cast<ManagementBaseObject>().First()["UserName"].ToString().Split(sep, StringSplitOptions.None);

我添加“Select * From Win32_ComputerSystem Where(Name LIKE'ws%'或Name LIKE'it%')”这将获得全名的用户名

希望这可以帮到你

这实际上几乎完全相反,但可以根据需要检查和修改起点:

使用登录名在Active Directory中查找用户

没有身份:

private string GetLogonFromDisplayName(string displayName)
{
    var search = new DirectorySearcher(string.Format("(&(displayname={0})(objectCategory=user))", displayName));
    search.PropertiesToLoad.Add("sAMAccountName");

    SearchResult result = search.FindOne();
    if (result != null)
    {
        var logonNameResults = result.Properties["sAMAccountName"];
        if (logonNameResults == null || logonNameResults.Count == 0)
        {
            return null;
        }

        return logonNameResults[0].ToString();
    }

    return null;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM