2011-03-17 116 views
4

我想从Active Directory中检索用户的登录名。如何从Active Directory中检索用户的登录名?

例如名称为“扬·德·林登” 给这名作为参数,我必须回报例如jvdlinden

+0

修改我的答案..请再检查一遍 – Hiyasat 2011-03-17 10:55:43

+0

您已接受的答案。如果你想改善这个问题,编辑它。如果您有新问题,请提出一个新问题。 – Will 2011-03-17 13:38:59

+0

有些人确实发布了我没有要求的答案。最后marc_s提供了一个解决方案。 – SamekaTV 2011-03-17 13:42:51

回答

5

既然你在.NET 3.5及以上,你应检查System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。在这里阅读全部内容:

Managing Directory Security Principals in the .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使它真的很容易在公元玩弄用户和组:

+0

嘿marc_s, 你知道我为什么得到这个错误吗? (&(objectCategory = user)(objectClass = user)(|(userPrincipalName =)(distinguishedName =)(name =)))搜索过滤器无效。 – SamekaTV 2011-03-17 15:17:27

1

使用.NET库中,可以使用下面的代码来获取用户名得到他的登录名后或从Active Directory

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哪里(名称,如 'WS%' 或名称LIKE '它%')” 这将由全名获取用户名

,希望能帮助您

+0

我在哪里给全名作为参数? – SamekaTV 2011-03-17 10:28:55

+0

你不能 - 这将返回当前登录用户 – stuartd 2011-03-17 10:30:31

+0

不,这不是我想要的。我想给全名作为参数并获取登录名。 – SamekaTV 2011-03-17 10:31:55

1

检查此链接已所需的代码snipple

Validate 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 
       } 
      } 
     } 
0

不认同:

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; 
} 
相关问题