任何区分“;人民用户帐户”;以及“;计算机用户帐户”;
本文关键字:用户 以及 计算机 任何区 | 更新日期: 2023-09-27 18:00:30
在查询Active Directory中的用户时,有没有办法过滤掉为计算机创建的用户帐户?理想情况下,这种方式在大多数典型网络中都很常见。例如:
DirectorySearcher ds = new DirectorySearcher(new DirectoryEntry([Users_OU_root]));
ds.filter = "(&(objectClass=User)([CRITERIA_TO_FILTER_OUT_COMPUTER_USER_ACCOUNTS]))";
ds.FindAll();
...
如果您使用的是.NET 3.5及更高版本,则应该检查System.DirectoryServices.AccountManagement
(S.DS-AM)命名空间。点击此处阅读:
- 在.NET Framework 3.5中管理目录安全主体
- System.DirectoryServices.AccountManagement上的MSDN文档
基本上,您可以定义域上下文,并在AD:中轻松找到用户和/或组
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
if(user != null)
{
// do something here....
}
// find the group in question
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere");
// if found....
if (group != null)
{
// iterate over members
foreach (Principal p in group.GetMembers())
{
Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName);
// do whatever you need to do to those members
}
}
新的S.DS.AM使得在AD:中与用户和组玩起来非常容易
计算机帐户将显示为ComputerPrincipal
(源自Principal
),因此您可以轻松地将用户和计算机帐户分开。
如果您不能或不想移动到S.DS.AM,您也可以通过在LDAP筛选器中使用objectCategory
而不是objectClass来分隔用户和计算机。无论如何,objectCategory
是有益的,因为它是索引的,而不是多值的,所以查询性能会更好。
对于现实生活中的用户,请使用objectCategory = Person
,而对于计算机,请在LDAP筛选器中使用objectCategory = Computer
。
即使我同意答案。Active Directory仍然是LDAP服务器。这是你要找的过滤器:
(&(objectCategory=user)(objectClass=user)(...))
"objectCategory=user
"是Active Directory理解的"objectCategory=CN=User,CN=Schema,CN=Configuration,DC=dom,DC=fr
"的快捷方式,但在其他目录中也是一种方式,这就是为什么我会给出答案,即使接受了另一个答案。