【问题标题】:How to clone a UserPrincipal object in VB.NET如何在 VB.NET 中克隆 UserPrincipal 对象
【发布时间】:2020-07-14 15:24:12
【问题描述】:

我正在尝试通过 VB.NET 应用程序在 Active Directory 中创建新用户。除了姓名、SurName、Email、SamAccountName 等之外,大多数字段都与现有的“模板”用户相同。

所以我想复制或克隆这个模板用户,为几个字段分配一个新的/不同的值,然后将这个新用户保存在 Active Directory 中。我想避免手动将模板中的谁知道有多少属性分配给新用户,并且可能会在此过程中忘记一些东西..

没有办法吗?我发现了一些关于使用DirectoryEntry.CopyTo() 的信息,但我只是得到一个“未实现”错误,无论如何我怀疑这是正确的方向(不确定如何将此类与UserPrincipal 对象一起使用)

我应该使用与System.DirectoryServices.AccountManagement.UserPrincipal 不同的类来将我的新用户保存在 AD 中吗?我的方法有误吗?

任何帮助将不胜感激:)

【问题讨论】:

    标签: vb.net active-directory clone


    【解决方案1】:

    如果您查看source code for DirectoryEntry.CopyTo,它会调用:

    newParent.ContainerObject.CopyHere(Path, newName)
    

    ContainerObject 的类型为IADsContainer。如果您查看documentation for IADsContainer.CopyHere,它会说(在备注下):

    随 ADSI 提供的提供程序返回 E_NOTIMPL 错误消息。

    ADSI 是“Active Directory 服务接口”。所以简短的回答是它不适用于 AD 对象。

    没有办法做你想做的事。您必须手动分配要复制的每个属性。

    【讨论】:

    • 感谢您的回答。请允许我问:即使通过 DirectoryEntry.CopyTo 无法实现我想要的,你怎么能确信没有其他方法可以实现这一点(除了手动分配每个属性)?我承认我对有关 Active Directory、我应该使用哪个对象等的整个 .NET 文档有点迷失了。
    • 是的,我相信如果不自己编写代码,就无法复制 AD 对象。
    • 我不是在问你是否有信心,我想知道为什么你有信心 :P 你如何真正浏览文档并得出这个明确的答案.你怎么知道某处没有其他复制或克隆方法?我猜你只是从经验中知道,并且通过对这些类的层次结构/继承有很好的理解......无论如何,再次感谢:)
    • 对不起,我错过了“如何”。但是,是的,我已经看了很多文档,但从未见过允许它的方法。
    • 如果你有兴趣,我写了一篇关于获取better performance when programming with AD 的整篇文章。
    猜你喜欢
    • 2011-09-19
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2012-11-17
    • 2010-09-07
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多