.net PrincipalContext/UserPrincipal.FindByIdentity()如何使用只读域控制器?

.net PrincipalContext/UserPrincipal.FindByIdentity()如何使用只读域控制器?,.net,active-directory,domaincontroller,.net,Active Directory,Domaincontroller,Active Directory(AD DS)具有“只读域控制器”(RODC)的概念。可能是为了向后兼容,默认设置是忽略只读域控制器:必须明确指定允许连接到只读域控制器 在我们的C代码中,我们在两个地方看到了这一点。一种是在创建新的RODC时:通过设置允许使用RODC的标志,可以轻松解决问题 我的问题是如何为下面这样的代码实现同样的功能,它使用命名空间中的类: using (PrincipalContext ctx = new PrincipalContext(ContextType.Domai

Active Directory(AD DS)具有“只读域控制器”(RODC)的概念。可能是为了向后兼容,默认设置是忽略只读域控制器:必须明确指定允许连接到只读域控制器

在我们的C代码中,我们在两个地方看到了这一点。一种是在创建新的RODC时:通过设置允许使用RODC的标志,可以轻松解决问题

我的问题是如何为下面这样的代码实现同样的功能,它使用命名空间中的类:

using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
using (UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(
                                                      ctx,
                                                      IdentityType.SamAccountName,
                                                      ...))
{
    // ...
}
因为我们注意到这段代码忽略了任何只读域控制器


(请注意,上面的问题与在标题为的帖子中发布的问题完全相同。)

最有可能发生的情况是,由于此功能不存在,因此对其进行了过度关注。如果没有仔细查看,那么这是故意的,因为RODC不允许您执行
UserPrincipal
上存在的许多方法(例如更改密码、删除等)。我可以想象,要解决这个问题,微软必须创建一个新的
ReadOnlyUserPrincipal
。更重要的是,为什么将
System.DirectoryServices.AccountManagement
命名空间中的任何内容实例化为只读是有意义的,因为该命名空间似乎不仅仅是一个只读服务(因为缺少更好的术语),除非不存在只读版本(这种情况下)。因此,使用非只读服务并将其指向只读源是行不通的。

最有可能发生的情况是,由于该功能不存在,因此该功能被过度关注。如果没有仔细查看,那么这是故意的,因为RODC不允许您执行
UserPrincipal
上存在的许多方法(例如更改密码、删除等)。我可以想象,要解决这个问题,微软必须创建一个新的
ReadOnlyUserPrincipal
。更重要的是,为什么将
System.DirectoryServices.AccountManagement
命名空间中的任何内容实例化为只读是有意义的,因为该命名空间似乎不仅仅是一个只读服务(因为缺少更好的术语),除非不存在只读版本(这种情况下)。因此,使用非只读服务并将其指向只读源是行不通的。

好的,感谢您给出了“不可能”的答案。在这段特定代码中,我们所要做的就是在给定用户的sAMAccountName的情况下获取UPN,这不需要写访问权限。我假设这意味着我们应该通过
DirectoryEntry
来实现?不管怎样,这就是我要尝试的。好的,谢谢你给出了这个“不可能”的答案。在这段特定代码中,我们所要做的就是在给定用户的sAMAccountName的情况下获取UPN,这不需要写访问权限。我假设这意味着我们应该通过
DirectoryEntry
来实现?无论如何,这就是我要尝试的。