我遇到的问题是,新添加的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组呢?
发布于 2018-07-10 16:15:32
我可以通过在底层目录条目上添加一个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路径查询该组(它使用了一个新的主体上下文,我不确定它是否有什么不同)。希望它能帮助你继续前进。
https://stackoverflow.com/questions/51258634
复制相似问题