为什么从Active Directory中的“域用户”中更改用户的“主要组”会阻碍用户的递归搜索?

| 给定以下简单的OU / Group层次结构:
OU=MyApplication
    CN=CompanyClients(objectClass=\"group\"; Members=\"Clients\\Client1\")
    OU=Clients
        CN=Client1(objectClass=\"group\"; Members=\".\\client1-emp1; .\\client1-emp2\")
        CN=client1-Emp1 (objectClass=\"user\"; Primary Group=\"Client1\")
        CN=client1-Emp2 (objectClass=\"user\"; Primary Group=\"Domain Users\")
为什么以下递归搜索仅因为其主组未设置为“域用户”或“域来宾”而忽略了client1-emp1?另外,可以将其他哪些组设置为主组,以使emp1成功包含在搜索中?
using System.DirectoryServices.AccountManagement;

var ctx = new PrincipalContext(ContextType.Domain, \"mydomain.org\");
var group = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, \"CompanyClients\");

var results = group.GetMembers(recursive:true);
//results excludes client1-emp1 but includes client1-emp2
foreach (var principal in results)
{
    Debug.WriteLine(\"Principal:\" + principal.SamAccountName);
}
结果:
Principal: client1-emp2
    
已邀请:
如果您在Active Directory中检查对象的\“ memberOf \”属性(例如,检查您自己的帐户),则会看到该对象不包含您的主要组(很可能是“域用户”)。通过查看\“ primaryGroupID \”属性(如果您的主要组是域用户),可以看到一个人的主要组,该属性是\“ 513 \”。 同样,如果选中“域用户”的“成员”属性,则不会看到以“域用户”作为主要组的人。 我记得在某处读过,这样做是出于性能方面的原因(当然,现在我找不到这篇文章),因为在某些情况下,拥有太多成员的组会影响性能。
GroupPrincipal
GetMembers
方法可能不会搜索将该组作为主要组的用户(即,它不检查PrimaryGroupId属性),这就是为什么看不到成员之一的原因。 本文介绍了如何为用户解析主要组,我认为您应该能够使用此处说明的概念来解决您的问题:如何使用PrimaryGroupID属性为用户找到主要组     

要回复问题请先登录注册