.NET 3.5 - System.DirectoryServices.AccountManagement - 组上的 AdvancedSearchFilter?

Posted

技术标签:

【中文标题】.NET 3.5 - System.DirectoryServices.AccountManagement - 组上的 AdvancedSearchFilter?【英文标题】:.NET 3.5 - System.DirectoryServices.AccountManagement - AdvancedSearchFilter on group? 【发布时间】:2011-08-06 10:30:04 【问题描述】:

我正在使用System.DirectoryServices.AccountManagement API 从 AD 中提取组列表。这些组都以相同的前缀开头,因此使用前缀和通配符很容易找到它们。我还想做的是获取自上次检查以来已更改的组。我已经将GroupPrincipal 子类化为包含whenChanged 属性,并且在我拉出完整的组列表后,我目前正在使用它来过滤列表。我想知道的是,是否可以在GroupPrincipal 上执行AdvancedFilterSearch?我意识到GroupPrincipal 没有AdvancedFilterSearch 属性。我想知道如果您在子类中添加一个 PrincipalSearcher 会使用它吗?如果是的话,举个例子就好了。

谢谢,

克里斯·麦金农

【问题讨论】:

您好,只是想知道您想通过使用 AdvancedFilterSearch 来实现什么?我在问,因为可能有一些其他策略可以通过不使用 AdvancedFilterSearch 来解决您的问题 【参考方案1】:

仅获取自上次检查以来发生更改的组的简短答案是(很容易)不可能。

AD 中的每个对象都有一个与之关联的更新序列号属性。当一个组更改其 USN 时。但不总是。如果您向组添加/删除成员,则 USN 不会更改。只有当您更改组名或其他简单属性时,它才会更改。 最重要的是,USN 编号在单个域控制器上是唯一的。因此,您必须确保始终连接到同一台服务器。

您可以订阅对 AD 对象的更改并在更改时收到通知,但这无法扩展。

在我的项目中,我最终每次都查询所有组。这并不像听起来那么糟糕,因为 API 非常擅长对结果集进行分页,并且通过查看资源并不是很密集。

【讨论】:

以上是关于.NET 3.5 - System.DirectoryServices.AccountManagement - 组上的 AdvancedSearchFilter?的主要内容,如果未能解决你的问题,请参考以下文章

使用 .NET 4.0 还是 .NET 3.5?

.Net 2.0 与 .Net 3.5 的性能对比

.Net Framework 3.5 和 .Net Framework 3.5 SP1 有相同的版本号吗?

如何将项目从 .NET 3.5 降级到 .NET 2.0?

从 Asp.Net 4 项目进入引用的 .Net 3.5 程序集

如何将 .net 3.5 添加到 Visual Studio 2010?