2011-03-17 264 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; 
} 
相關問題