【问题标题】:How do I set the ManagedBy property on a GroupPrincipal如何在 GroupPrincipal 上设置 ManagedBy 属性
【发布时间】:2010-07-20 10:55:04
【问题描述】:

我正在使用System.DirectoryServices.AccountManagement 中的GroupPrincipal 类在Active Directory 中创建和更新组。创建和更新时,我还需要能够设置 ManagedBy 属性,您可以在 AD 管理控制台的组属性中的 Managed By 选项卡中设置该属性。

可以通过编程方式完成吗?

【问题讨论】:

    标签: c# active-directory directoryservices


    【解决方案1】:

    很遗憾,您不能直接执行此操作 - 但您可以访问底层 DirectoryEntry 并在那里执行此操作:

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
    
    UserPrincipal toBeModified = UserPrincipal.FindByIdentity(".....");
    UserPrincipal manager = UserPrincipal.FindByIdentity(ctx, "......");
    
    DirectoryEntry de = toBeModified.GetUnderlyingObject() as DirectoryEntry;
    
    if (de != null)
    {
        de.Properties["managedBy"].Value = manager.DistinguishedName;
        toBeModified.Save();
    }
    

    【讨论】:

    • tobeModified 不应该是 GroupPrincipal 类型吗?
    • @PBMe_HikeIt:不,因为managedBy 属性没有在GroupPrincipal 中“浮出水面”,您需要“向下一层”到DirectoryEntry 并在那里处理它
    【解决方案2】:

    您可以扩展 GroupPrincipal 类并使用ExtensionSet 方法提供ManagedBy 属性。

    【讨论】:

    • 这就是我解决问题的方式......虽然我无法让 ExtensionSet 正常工作
    • This on Code Project 看起来很好地解释了如何使用继承来扩展 GroupPrincipal 类
    【解决方案3】:

    看看this page。这是 C# 中关于 AD 的最佳教程之一。

    一些应该可以工作的代码(未经测试):

        string connectionPrefix = "LDAP://" + ouPath;
        DirectoryEntry dirEntry = new DirectoryEntry(connectionPrefix);
        DirectoryEntry newGroup = dirEntry.Children.Add
            ("CN=" + groupName, "group");
        group.Properties["sAmAccountName"].Value = groupName;
        newGroup.Properties["managedBy"].Value = managerDistinguishedName;
        newGroup.CommitChanges();
        dirEntry.Close();
        newGroup.Close();
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多