【发布时间】:2021-02-26 18:29:18
【问题描述】:
我正在创建一个小型实用程序,它将从源中获取用户数据。该用户数据包括全名和电子邮件,此来源将发生变化(更新、创建和删除用户)。
将该信息同步到 AD 的最佳方法是什么。我觉得他们的方式我正在做的不是最好/有效的方式。
现在我有代码删除 OU(本地活动目录)中的所有当前联系人,然后添加所有存在的联系人。此同步实用程序每 30 分钟运行一次。大约有300个联系人。在服务器上,打开了回收站,我的另一个担心是我当前的代码会创建一堆不必要的对象。
我需要具备以下能力: 删除不再位于源头的联系人。更新在源上所做的任何更改(电子邮件更新),或创建新联系人。
我正在使用 C# System.DirectoryServices。源无法触发或发送单独更新的信息。我只能从源中提取数据。
【问题讨论】:
-
删除然后重新添加所有内容似乎是一种蛮力方法,因为您最终可能会删除您只需添加回来的内容。 (如果有人在同步完成之前尝试使用该信息,也会出现问题,因为项目会暂时丢失)。最好 (1) 删除不再位于源中的项目,(2) 遍历剩余项目以检查任何必要的更新,以及 (3) 添加任何全新的联系人。这是同步两个列表的一种非常简单的方法。
-
我同意,但是,以编程方式实现这一目标的最佳方法是什么(不要求特定代码,我只需要一个概念)。添加新是最简单的,我所要做的就是检查对象是否存在于 AD 上,如果不存在则创建。对于更新,我可以检查是否存在,如果存在,我可以比较邮件属性并更新是否不同。但是对于删除?最好的方法是什么?
-
您知道如何检查对象是否存在于 AD 中。你能不颠倒这个逻辑来检查源中是否仍然存在 AD 对象吗?
-
我在想这个,源码的API很奇怪,但理论上是可以的。我稍后会尝试在此处更新状态。
-
我个人会将问题分解。只需从奇怪的 API 中获取完整列表并将其存储在 C# 对象中,然后从那里完成其余的工作。
标签: c# active-directory directoryservices