【问题标题】:GroupPrincipal.FindByIdentity not getting the latest AD groupGroupPrincipal.FindByIdentity 未获取最新的 AD 组
【发布时间】:2023-03-10 11:48:02
【问题描述】:

我遇到的问题是新添加的 AD 组似乎无法通过 GroupPrincipal.FindByIdentity() 方法立即搜索。

以下是我用于添加组的代码。

// to add a new AD group
using (var group = new GroupPrincipal(context, groupName))
{
   group.GroupScope = GroupScope.Universal;
   group.Save();
}

我想在这里提到的一件事是 PrincipalContext 对象 context 仅在我的 AD 服务类的构造函数中创建一次,并且我在服务类的整个生命周期中重复使用相同的 context 对象.不确定这是否会导致任何潜在的问题。

那么,在添加新组后,我可以做些什么来获得最新的 AD 组?

【问题讨论】:

    标签: c# .net active-directory ldap directoryservices


    【解决方案1】:

    我可以通过在底层目录条目上添加一个 CommitChanges 来实现这一点。

    public static void Test()
    {
        var context = PrincipalContextProvider.ProvideContext();
    
        for (int i = 0; i < 10; i++)
        {
            using (var group = new GroupPrincipal(context, $"Hello_World_{i}"))
            {
                group.GroupScope = GroupScope.Universal;
                group.Save();
                ((DirectoryEntry)group.GetUnderlyingObject()).CommitChanges();
            }
    
            var _group = GetGroup($"CN=Hello_World_{i},CN=Users,DC=abc,DC=com");
            Console.WriteLine(_group.Name);
        }
    }
    

    解释: PrincipalContextProvider 只是提供您在代码中使用的上下文。 CommitChanges 方法将对目录条目所做的更改保存到基础目录存储中。您还需要 Save 方法!至少,GetGroups 方法通过其 LDAP 路径查询组(它使用新的主体上下文,我不确定它是否有任何不同)。希望它有助于前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多