【问题标题】:DirectoryEntry refresh misc problemeDirectoryEntry 刷新杂项问题
【发布时间】:2017-06-23 09:22:59
【问题描述】:

在代码中,我使用此代码将计算机帐户移动到另一个活动目录 OU 中。

DirectoryEntry eLocation = new DirectoryEntry("LDAP://" + DevicePath, ADAdmin, ADPass);
DirectoryEntry nLocation = new DirectoryEntry("LDAP://" + ADMoveOU, ADAdmin, ADPass);

eLocation.MoveTo(nLocation);
eLocation.CommitChanges();
eLocation.RefreshCache();
nLocation.Close();
eLocation.Close();

从这里代码返回所有好的计算机移动到另一个 OU。但是,我现在需要使用此代码为用户刷新数据。

DirectoryEntry Entry = new DirectoryEntry(Domain, ADUSER, ADpassword);
Entry.RefreshCache();
DirectorySearcher Search = new DirectorySearcher(Entry);
Search.Filter = string.Format("(&(objectCategory=computer)(cn={0}))", DeviceName);

这就是这段代码告诉我计算机没有移动的问题 实际上,我必须在移动和刷新之间等待 30 秒才能获得正确的活动目录数据。

所以,我不明白怎么回事。我什至刷新了缓存,为什么移动结果在移动后没有立即刷新?

【问题讨论】:

  • 可能有 2 个原因导致此问题: DirectoryEntry 的 UsePropertyCshe 属性设置为 true。应设置为假。另一个原因是当您在一个域控制器上进行更改并连接到另一个域控制器时。在这种情况下,您必须等待复制通过。在多 DC 环境中始终连接到同一个 DC
  • 我在 Cashe 上尽我所能。所以我猜它来自控制器的延迟,但不确定如何设置代码来处理这个
  • 将域控制器名称传递给 DirectoryEntry 构造函数,例如。 G。 LDAP://mydomaincontroller.mydomain.com。您可以通过调用 DomainController.FindOne 方法获得有效的工作 DC

标签: c# .net active-directory


【解决方案1】:

我自己现在也遇到了这个问题——据我所知,Active Directory 本身似乎需要一些时间来处理将对象从一个容器/OU 移动到另一个容器/OU 的过程——这种变化似乎持续存在于 Active Directory 服务器本身上至少几秒钟。

一种解决方法是向对象添加一个自定义字段以指示其存储位置 - 然后使用它来构建您的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2011-01-05
    • 2011-08-04
    • 2011-01-12
    相关资源
    最近更新 更多