从ADGroup获取电子邮件地址列表

问题描述:

如果我有Active Directory组的名称,如何获取成员或他们的电子邮件地址列表?从ADGroup获取电子邮件地址列表

在这个网址

void Main() 
{ 
    string groupName = "somegroup"; 
    string domainName = "somedomain"; 

    using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName)) 
    { 
     using(GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, groupName)) 
     { 
      var sams = from x in grp.GetMembers(true) select new {x.SamAccountName, }; 
      var users = from sam in sams.Distinct() 
       let usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, sam.SamAccountName) 
       select new { usr.SamAccountName, usr.DisplayName, usr.EmailAddress}; 
      //do something with users... 
     } 
    } 
} 
+0

这很好用!我可以获取用户信息,但没有看到每个用户的电子邮件地址。我怎样才能得到每个成员的电子邮件地址? – Jerry 2013-03-12 13:32:34

+1

你走了。当然有各种方式循环访问数据。重要的是您可以通过SamAccountName获取UserPrincipal。 UserPrincipal具有你想要的数据。 – 2013-03-12 14:50:06

+1

对于.NET 3.5和较新的,你应该开始寻找到使用' System.DirectoryServices.AccountManagement',它有一个更好,更容易使用的接口('PrincipalContext'和'UserPrincipal'),它的使用效率更高。 'DirectoryEntry'是非常低级的,并且非常难以使用.... – 2013-03-11 22:02:14