我已阅读了几篇帖子,但我无法为我工作。我想在“标准用户”OU中创建所有显示名称的arraylist。然后我将使用该arraylist填充下拉列表。我在另一个线程中找到了以下内容,但它在指定的OU中提供了组而不是用户:
public ArrayList Groups()
{
ArrayList groups = new ArrayList();
foreach (System.Security.Principal.IdentityReference group in
System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
{
groups.Add(group.Translate(typeof
(System.Security.Principal.NTAccount)).ToString());
}
return groups;
}
是否可以修改此标准用户OU中的用户列表?或者我应该使用不同的方法吗?
我也发现了这个,但是我收到一个错误('std_users'下的红线)表示'并非所有代码路径都返回一个值'。
public ArrayList std_users()
{
// List of strings for your names
List<string> allUsers = new List<string>();
// create your domain context and define the OU container to search in
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "myco.org", "OU=Standard Users, dc=myco, dc=org");
// define a "query-by-example" principal - here, we search for a UserPrincipal (user)
UserPrincipal qbeUser = new UserPrincipal(ctx);
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach (var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal" - it could be user, group, computer.....
allUsers.Add(found.DisplayName);
}
}
非常感谢任何帮助。
我正在使用c#,Visual Studio 2013,框架是4.5.1。
答案 0 :(得分:1)
首先关闭:停止使用 ArrayList
- 该类型死自.NET 2.0以来不应使用 - 使用List<string>
(或更一般地说:List<T>
) - 更好的性能和可用性!
您可以使用PrincipalSearcher
和&#34;按示例查询&#34;负责你的搜索:
public List<string> GetAllEmailsFromUsersContainer()
{
List<string> users = new List<string>();
// create your domain context and bind to the standard CN=Users
// container to get all "standard" users
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null, "CN=Users,dc=YourCompany,dc=com"))
{
// define a "query-by-example" principal - here, we search for a UserPrincipal
// which is not locked out, and has an e-mail address
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.IsAccountLockedOut = false;
qbeUser.EmailAddress = "*";
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach(var found in srch.FindAll())
{
users.Add(found.EmailAddress);
}
}
return users;
}
答案 1 :(得分:-1)
将return allUsers;
添加到std_users()
,并告诉我们这是否适合您。