非组所有者登录时从Active Directory组获取用户列表失败求助
非AD组所有者获取组信息返回null的解决方法
问题描述
尝试获取特定Active Directory组的用户列表时,因不是该组所有者,调用GroupPrincipal.FindByIdentity(context, groupName)返回null。已尝试两种PrincipalContext初始化方式均无效:
var context = new PrincipalContext(ContextType.Domain) var context = new PrincipalContext(ContextType.Domain, "domain.com")
解决方案
使用有权限的账号初始化上下文
若当前程序运行账号无该AD组的读取权限,可在初始化PrincipalContext时指定拥有读取权限的域账号凭据:var context = new PrincipalContext(ContextType.Domain, "domain.com", "授权用户名", "密码");直接通过DirectoryEntry访问AD对象
部分场景下,直接使用DirectoryEntry读取AD组信息的权限要求更低,可绕过Principal的权限限制:using (var adEntry = new DirectoryEntry($"LDAP://CN={groupName},OU=目标组织单元,DC=domain,DC=com")) { // 刷新缓存获取成员属性 adEntry.RefreshCache(new[] { "member" }); foreach (var memberPath in adEntry.Properties["member"]) { // 解析成员路径获取用户信息,示例: using (var userEntry = new DirectoryEntry($"LDAP://{memberPath}")) { Console.WriteLine($"用户名:{userEntry.Properties["samAccountName"].Value}"); } } }注意:需替换LDAP路径中的
OU=目标组织单元,DC=domain,DC=com为实际AD环境的组所在路径。申请AD组读取权限
联系域管理员,为当前运行账号授予该AD组的读取所有属性权限,无需成为组所有者即可获取组详情及成员列表。
内容的提问来源于stack exchange,提问作者Jasmin
相关产品推荐
相关产品推荐

