c# – 为什么在Active Directory中从“域用户”更改用户的“主要
发布时间:2020-12-15 17:17:06 所属栏目:百科 来源:网络整理
导读:给定以下简单的OU / Group层次结构: OU=MyApplication CN=CompanyClients(objectClass="group"; Members="ClientsClient1") OU=Clients CN=Client1(objectClass="group"; Members=".client1-emp1; .client1-emp2") CN=client1-Emp1 (objectClass="user";
给定以下简单的OU / Group层次结构:
OU=MyApplication CN=CompanyClients(objectClass="group"; Members="ClientsClient1") 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,因为它的主要组未设置为“Domain Users”或“Domain Guests”?此外,还可以将其他组设置为主要组,以便将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属性),这就是您没有看到其中一个成员的原因. 本文介绍了如何为用户解析主要组,我认为您应该能够使用此处说明的概念来解决您的问题:How to use the PrimaryGroupID attribute to find the primary group for a user (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |