使用DirectorySearcher API

时间:2016-08-10 07:46:09

标签: c# .net powershell active-directory directorysearcher

上下文

  • OU中有200万用户的Active Directory实例

  • 在我们的领域中可能增长到1 M

不是这方面的专家。我正在尝试为我需要轮询AD和

的场景提出解决方案设计
  • 检查PwdLastSet和LastLogonDate属性

  • 根据每位用户的价值(锁定帐户,发送电子邮件等)做出6个不同的决策(策略)。

理想情况下,如果是数据库,我可以选择

  • 打开连接
  • 阅读一小页数据
  • 关闭连接
  • 通过应用程序在内存中处理它们
  • 重复

(因此将它留给连接池来处理东西并允许其他人做他们的事情。)

我真的很想知道这种情况下可扩展的最佳实践/方法。我只需要为所有用户获取这两个属性(当然我们有过滤器 - 例如删除非活动状态)

就个人而言,我想知道我是否应该

  • 使用我们的自定义调度程序服务运行Powershell(或.NET),使用DirectorySearcher,打开连接(ssl),使用分页一次读取100/1000个用户并在内存中处理它们。与AD的连接仍然保持打开状态

  • 打开与AD的连接,获取CSV(分页)中所有用户的转储,关闭连接,将其写入数据库以处理其他任务。但是,这必须是一个夜间工作,具有潜在的数据库权限。

  • 在数据库表中复制这两个属性,并在它们通过我们的应用程序在AD中更改时保持它们同步。从这里收集数据。

等等。

连连呢?

1 个答案:

答案 0 :(得分:0)

尽可能在源处过滤。尽可能返回最小的属性集。

您可以利用DirectorySynchronization,但我会说,只有在您需要进行大量客户端计算的情况下这样做才有价值。我用这个技术来管理AD中的照片。我有一个离线同步集,它将照片作为哈希,可用于确保我只在需要时更新,当我更新时,我只从上次执行后的目录中下拉更改。

对于基于pwdLastSet或lastLogonTimeStamp的操作,我将始终生成(LDAP)过滤器,允许我向AD请求最小的结果集。我将始终请求实际需要使用的最少数量的属性。