下面的代码会告诉我组中的用户但是会返回
"CN=johnson\,Tom,OU=Users,OU=Main,DC=company,DC=com"
我想返回名字和姓氏。我怎么能做到这一点?
DirectoryEntry ou = new DirectoryEntry();
DirectorySearcher src = new DirectorySearcher();
src.Filter = ("(&(objectClass=group)(CN=Gname))");
SearchResult res = src.FindOne();
if (res != null)
{
DirectoryEntry deGroup = new DirectoryEntry(res.Path);
PropertyCollection pcoll = deGroup.Properties;
foreach (object obj in deGroup.Properties["member"])
{
ListBox1.Items.Add(obj.ToString());
}
}
答案 0 :(得分:28)
我更喜欢使用System.DirectoryServices.AccountManagement中的类:
PrincipalContext principalContext = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "GName");
搜索group.Members属性,直到您拥有所需的 Principal 。然后像这样提取名称:
foreach (Principal principal in group.Members)
{
string name = principal.Name;
}
答案 1 :(得分:2)
使用您的代码, givenName (名字)和 sn (姓氏)属性应该有效
如果您使用System.DIrectoryServices.AccountManagement命名空间UserPrincipal(如@ russell-mcclure建议的那样),您还会找到 GivenName 和 Surname 属性。
除非您必须遍历受信任的林并需要全局编录才能找到该用户,否则帐户管理非常方便。
答案 2 :(得分:0)
这是我在不使用AccountManagement类的情况下执行的PowerShell脚本。将它转换为C#:
应该很容易{{1}}