2012-02-23 68 views
2

我只需要知道「sAMAAccountName」字段的特定用戶。我可以通過某些屬性獲取特定用戶而無需知道Active Directory(AD)中的OU嗎?

的事情是,這個特定的用戶可以是許多組內:

OU=ThirdParty 
    OU=Company1 
     CN=User1 
     CN=User2 
     CN=User3 
    OU=Company2 
     CN=User1 
     CN=User2 
     CN=User3 

有沒有什麼辦法讓一個用戶不知道自己的團體,只使用一個屬性,他們有嗎?

我的代碼:

DirectorySearcher search = new DirectorySearcher(_path); 
search.Filter = "(&(objectCategory=person)(objectClass=User))"; 
StringBuilder groupNames = new StringBuilder(); 
try 
{ 
    SearchResultCollection result = search.FindAll(); 
    ..... 
} 

謝謝!

編輯:

好吧,我得到了它使用此代碼:

DirectorySearcher search = new DirectorySearcher(_entry, "(sAMAccountName=" + userCode + ")"); 
+0

在Anthony Shaw鏈接中,有一個例子在做我想要的同樣的東西!謝謝! – Otuyh 2012-02-23 20:46:25

回答

1

哪些信息你需要了解的用戶?我們已經用這種類型的代碼在過去的檢索有關用戶

using (var identity = new WindowsIdentity(username)) 
{ 
    var user = new WindowsPrincipal(identity); 

    if (user.IsInRole("Some Role Name")) 
     return true; 

    return false; 
} 

編輯 您的評論後的信息,我不知道這個帖子會爲您提供任何進一步的INSITE。他們如此顯示獲取您請求的字段,我只是不確定檢索員工的代碼是否適用於您,因爲這涉及到InfoPath:http://msdn.microsoft.com/en-us/library/bb952744(v=office.12).aspx

+0

那麼,我需要知道「physicalDeliveryOfficeName」字段,不知道這是否相關。我會嘗試你的代碼!謝謝! – Otuyh 2012-02-23 19:54:16

+0

添加了一個鏈接到一個關於infopath的msdn文章,看起來他們抓取的是'physicalDeliveryOfficeName',你可以看看它 – 2012-02-23 20:06:35

+1

謝謝!這個鏈接有答案! – Otuyh 2012-02-23 20:46:48

1

如果您切換到System.DirectoryServices.AccountManagement那麼您會發現API實際上更簡單。

例如:

public something FindUserByUserName(string UserName) 
    { 
     using (var searcher = 
      new PrincipalSearcher(new UserPrincipal(ConfigurationContext) { Name = UserName })) 
     { 
      var item = searcher.FindOne(); 

      // do whatever you want with the found object and return it 
     } 
    } 

其中ConfigurationContext是它返回PrincipalContext一個屬性(憑證連接到AD,類似的 「連接字符串」)

0

嘗試這種情況:

public static List<string> GetADUserInfo(string login) 
{ 
    //Using Hosting.HostingEnvironment.Impersonate() 
    List<string> info = new List<string>(); 
    PrincipalContext infPC = new PrincipalContext(ContextType.Domain, "domain", "login", "password"); 
    UserPrincipal infUP = new UserPrincipal(infPC); 
    PrincipalSearcher infPS = new PrincipalSearcher(); 
    UserPrincipal foundUP; 

    infUP.SamAccountName = login; 
    infPS.QueryFilter = infUP; 
    foundUP = infPS.FindOne(); 

    if (foundUP != null) { 
     info.Add(foundUP.SamAccountName.ToLower); 
     info.Add(foundUP.GivenName); 
     info.Add(foundUP.Surname); 
     info.Add(foundUP.EmailAddress.ToLower); 
     return info; 
    } 

    return null; 
} 
相關問題