我希望获得属于特定群组的用户列表' groupName'传递给私有方法。
DirectoryEntry de = new DirectoryEntry("LDAP://DC=xxxx,DC=net"); // Root Directory //
var ds = new DirectorySearcher(de);
ds.PropertiesToLoad.Add("SAMAccountName");
ds.PropertiesToLoad.Add("member");
ds.Filter = "(&(objectClass=group)(SAMAccountName=" + groupName + "))";
SearchResultCollection AllGroupUsers;
AllGroupUsers = ds.FindAll();
查询返回3个属性: - adspath,accountName和member。 成员是我真正追求的。我访问成员属性及其值,如下面的代码所示: -
if (AllGroupUsers.Count > 0)
{
ResultPropertyValueCollection values = AllGroupUsers[0].Properties["member"];
但这里发生了一些奇怪的事情。在等号的RHS上,AllGroupUsers具有特定成员的值为" CN = Mike Schoomaker R,........"
在等号的LHS上,值为" CN = Mike Schoomaker(OR),....."
我不太确定这是怎么可能的......对于AllGroupUsers下的每一个值都没有发生...只有我知道的事情是它发生在活动目录上的外部用户...可以有谁告诉我如何解决这个问题并得到实际的firstName,LastName和MiddleInitial?
答案 0 :(得分:1)
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// find a user
using (var group = GroupPrincipal.FindByIdentity(ctx, "groupName"))
{
if (group == null)
{
MessageBox.Show("Group does not exist");
}
else
{
var users = group.GetMembers(true);
foreach (UserPrincipal user in users)
{
//user variable has the details about the user
}
}
}
}
答案 1 :(得分:0)
要获取用户,而不是群组,您应设置DirectoryEntry对象并使用相应的属性(例如displayName
,sn
,givenName
,initials
)
示例:
...
AllGroupUsers = ds.FindAll();
if (AllGroupUsers.Count > 0) {
ResultPropertyValueCollection values = AllGroupUsers[0].Properties["member"];
foreach (string s in values)
{
DirectoryEntry u = new DirectoryEntry("LDAP://" + s);
Console.WriteLine(u.Properties["displayName"].Value);
}
}