C#中的GroupPrincipal.GetMembers(true)方法用于获取指定组中的所有成员,包括递归获取子组的成员。然而,有时候该方法可能无法返回域用户,这可能是由于权限问题或其他原因导致的。
替代方案是使用System.DirectoryServices.AccountManagement命名空间中的UserPrincipal.GetAuthorizationGroups()方法来获取域用户。该方法返回用户所属的所有授权组,包括递归获取子组的成员。
以下是一个示例代码:
using System.DirectoryServices.AccountManagement;
// 获取域用户的方法
public static List<UserPrincipal> GetDomainUsers()
{
List<UserPrincipal> domainUsers = new List<UserPrincipal>();
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
UserPrincipal userPrincipal = new UserPrincipal(context);
PrincipalSearcher searcher = new PrincipalSearcher(userPrincipal);
foreach (Principal result in searcher.FindAll())
{
if (result is UserPrincipal)
{
domainUsers.Add((UserPrincipal)result);
}
}
}
return domainUsers;
}
这个方法使用System.DirectoryServices.AccountManagement命名空间中的PrincipalContext和PrincipalSearcher类来搜索域中的用户。通过遍历搜索结果,将UserPrincipal类型的对象添加到列表中,最后返回该列表。
这种替代方案可以解决GroupPrincipal.GetMembers(true)方法无法返回域用户的问题,并且不依赖于特定的云计算品牌商。
注意:在使用该方法之前,需要确保你的应用程序具有足够的权限来访问域用户信息。
领取专属 10元无门槛券
手把手带您无忧上云