none
微软的AD域,有增加/删除用户的接口可供调用吗? RRS feed

  • 问题

  • 主要是想通过自己开发的程序来对AD域的用户进行维护,这样就可以实现在其他系统中对用户进行管理,同时更新到AD域里面。

    请问微软是否有提供这方面的接口?


    da jia hao!

    2012年7月18日 2:27

答案

  • 可以通过LDAP的方式进行操作的。如下代码:

    新建AD用户:

      System.DirectoryServices.DirectoryEntry myDirectoryEntry = ent.Children.Add("CN=" + usr.SAMAccountName, "user");
                        ADEntityControls.SetProperty(myDirectoryEntry, "distinguishedName", usr.DistinguishedName);
                        ADEntityControls.SetProperty(myDirectoryEntry, "name", usr.Name);
                        ADEntityControls.SetProperty(myDirectoryEntry, "displayName", usr.DisplayName);
                        ADEntityControls.SetProperty(myDirectoryEntry, "sAMAccountName", usr.SAMAccountName);
                        ADEntityControls.SetProperty(myDirectoryEntry, "sn", usr.Sn);
                        ADEntityControls.SetProperty(myDirectoryEntry, "givenName", usr.GivenName);
                        ADEntityControls.SetProperty(myDirectoryEntry, "physicalDeliveryOfficeName", usr.PhysicalDeliveryOfficeName);
                        ADEntityControls.SetProperty(myDirectoryEntry, "telephoneNumber", usr.TelephoneNumber);
                        ADEntityControls.SetProperty(myDirectoryEntry, "description", usr.Description);
                        ADEntityControls.SetProperty(myDirectoryEntry, "comment", usr.Department);
                        ADEntityControls.SetProperty(myDirectoryEntry, "Mobile", usr.Mobile);
                        ADEntityControls.SetProperty(myDirectoryEntry, "mail", usr.Mail);
                        ADEntityControls.SetProperty(myDirectoryEntry, "objectVersion", usr.ExtensionAttribute1);
                        ADEntityControls.SetProperty(myDirectoryEntry, "revision", usr.ExtensionAttribute2);
                        ADEntityControls.SetProperty(myDirectoryEntry, "scriptPath", usr.ExtensionAttribute3);
                        ADEntityControls.SetProperty(myDirectoryEntry, "roomNumber", usr.ExtensionAttribute4);
                        ADEntityControls.SetProperty(myDirectoryEntry, "userAccountControl", "544");
                        myDirectoryEntry.CommitChanges();
                        SetUserPassword(myDirectoryEntry, password);
                        myDirectoryEntry.CommitChanges();
                        myDirectoryEntry.Close();
                        myDirectoryEntry.Dispose();

    移除用户:

     DirectoryEntry usrentry = ADEntityControls.GetEntry(ads, "(&(objectClass=user)(objectCategory=Person)(sAMAccountName=" + SAMAccountName + "))", SearchScope.Subtree);
                if (usrentry != null)
                {
                    usrentry.Parent.Children.Remove(usrentry);
                    usrentry.Close();
                    usrentry.Dispose();
                    return !ExistUser(ads, SAMAccountName);
                }

    修改密码:

     public static void SetUserPassword(DirectoryEntry oDE, string Password)
            {
                if (oDE != null)
                {
                    try
                    {
                        oDE.Invoke("SetPassword", new object[] { Password });
                    }
                    catch (System.Exception)
                    {

                    }
                }
            }

    2012年7月20日 3:47
  • 您好,請參考小弟上面的link,另外,下面的link也有相關的範例,

    Using System.DirectoryServices C# 代码示例速查列表  

    本主题包含指向“System.DirectoryServices 使用指南”中包含的所有 C# 代码示例的链接。

    创建组

    使用 Add 方法。

    添加目录对象

    使用 Add 方法添加子对象。

    向组中添加成员

    使用 Add 方法。

    绑定字符串

    使用 DirectoryEntry 对象绑定到多个对象。

    使用 GUID 绑定

    使用 NativeGuid 属性。

    Boolean 属性类型

    使用 Value 属性读取和设置 Boolean 属性。

    管理用户密码

    更改用户密码。

    结构化属性

    读取和写入结构化属性。

    DirectoryEntry 对象

    在内存中创建绑定到目录中某一项的 DirectoryEntry 对象,并且写入该目录项的路径、名称和 GUID。

    创建组

    创建新组、域本地组和非安全组。

    创建用户

    使用 Add 方法。

    DateTime 属性

    写入 date/time 属性。

    删除组

    使用 Remove 方法。

    DirectorySearcher 示例

    设置基本目录搜索。

    具有二进制属性类型的 DN

    使用 ActiveDS 进行读写操作。

    枚举子对象

    使用简单 foreach 语句。

    枚举组中的成员

    使用属性。

    枚举组中的成员

    使用 Windows 窗体。

    枚举大组中的成员

    使用范围检索。

    获取对象的标识

    获取 DirectoryEntry 对象的属性。

    调用 ADSI 方法

    使用 Invoke 方法。

    调用 ADSI 属性

    使用 InvokeMember 方法。

    大整数属性类型

    读取和写入大整数。

    移动目录对象

    使用 MoveTo 方法。

    定位到子对象

    使用 Children 属性绑定到多个子对象。

    定位到父对象

    使用 Parent 属性绑定到多个父对象。

    八位字节字符串 (SID) 属性类型

    读取和写入八位字节字符串。

    读取目录对象的属性

    使用 Properties 集合读取对象属性。

    读取具有多个值的属性

    使用 Values 属性和数组读取属性值。

    设置多个目录对象的多个属性

    将 Setting 属性与 Add 方法和 Value 属性一起使用。

    设置具有多个值的属性

    使用 AddRange 和 Insert 方法并使用数组。

    属性缓存

    使用 RefreshCache 方法。

    从组中删除成员

    使用 Add 方法。

    重命名对象

    使用 Rename 属性。

    搜索组

    使用 DirectorySearcher。

    附加搜索选项

    使用 ReferralChasing 属性。

    获取搜索结果

    使用 SearchResult 和 SearchResultCollection 类检索搜索结果。

    搜索目录

    将 DirectorySearcher 类和 FindAll 方法一起用于搜索目录。

    设置搜索筛选器

    使用 Filter 属性设置搜索筛选器。

    设置搜索范围

    使用 SearchScope 属性。

    安全描述符属性类型

    使用 ActiveDS 读取和写入安全描述符。

    管理用户密码

    设置用户密码。

    字符串属性类型

    读取字符串。

    启用和禁用用户帐户

    启用和禁用用户帐户。

    管理用户密码

    使用 ActiveDS。

    设置用户帐户到期

    使用 InvokeMember 方法。

    设置用户帐户标志

    设置标志。

    设置在属性页上显示的属性

    设置在用户界面中查看的属性。

    添加目录对象

    使用 Exists 方法验证目录对象在目录中是否存在。


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年7月23日 1:22

全部回复