• 更新Active Directory中用户信息


    更新Active Directory中用户信息

     

    Written by: Rickie Lee (http://www.cnblogs.com/rickie)

    首先根据UserName创建DirectoryEntry对象实例:

    DirectoryEntry de= new DirectoryEntry(results.Path,ADUser,ADPassword,AuthenticationTypes.Secure);

    需要注意的是ADUser/ADPassword必须具有Account OperatorAdministrator的权限,否则de.CommitChanges();会抛出异常。

     

    下面的示例代码演示从DataSet中获取AD属性值,并赋予给对应的AD属性。同时,也演示了如何使用AD的扩展属性extensionAttribute1 extensionAttribute6

    public static void UpdateUserByDataSet(DataSet dsUser)

    {

          string UserName = dsUser.Tables[0].Rows[0]["LoginName"].ToString();

          DataRow theRow = dsUser.Tables[0].Rows[0];

          DirectoryEntry deUser = GetUser(UserName);

     

          if(theRow["FirstName"].ToString().Trim().Length != 0)

                deUser.Properties["givenName"].Value = theRow["FirstName"].ToString();

          if(theRow["MiddleInitial"].ToString().Trim().Length != 0)

                deUser.Properties["initials"].Value = theRow["MiddleInitial"].ToString();

          if(theRow["LastName"].ToString().Trim().Length != 0)

                deUser.Properties["sn"].Value = theRow["LastName"].ToString();

          if(theRow["Alias"].ToString().Trim().Length != 0)

                deUser.Properties["mailNickname"].Value = theRow["Alias"].ToString();

          if(theRow["Display"].ToString().Trim().Length != 0)

                deUser.Properties["displayName"].Value = theRow["Display"].ToString();

          if(theRow["Title"].ToString().Trim().Length != 0)

                deUser.Properties["Title"].Value = theRow["Title"].ToString();

     

          if(theRow["Address"].ToString().Trim().Length != 0)

                deUser.Properties["streetAddress"].Value = theRow["Address"].ToString();

          if(theRow["Company"].ToString().Trim().Length != 0)

                deUser.Properties["company"].Value = theRow["Company"].ToString();

          if(theRow["Department"].ToString().Trim().Length != 0)

                deUser.Properties["department"].Value = theRow["Department"].ToString();

          if(theRow["Office"].ToString().Trim().Length != 0)

                deUser.Properties["physicalDeliveryOfficeName"].Value = theRow["Office"].ToString();

          if(deUser.Properties["Assistant"].ToString().Trim().Length != 0)

                deUser.Properties["telephoneAssistant"].Value = theRow["Assistant"].ToString();

     

          if(theRow["City"].ToString().Trim().Length != 0)

                deUser.Properties["l"].Value = theRow["City"].ToString();

          if(theRow["State"].ToString().Trim().Length != 0)

                deUser.Properties["st"].Value = theRow["State"].ToString();

          if(theRow["Zip"].ToString().Trim().Length != 0)

                deUser.Properties["postalCode"].Value = theRow["Zip"].ToString();

          if(theRow["Country"].ToString().Trim().Length != 0)

                deUser.Properties["co"].Value = theRow["Country"].ToString();

     

          // Phone & Notes

    …………

     

          // Job Data

          if(theRow["AdminSupervisor"].ToString().Trim().Length != 0)

                deUser.Properties["extensionAttribute1"].Value = theRow["AdminSupervisor"].ToString();

          if(theRow["AdminSubordinates"].ToString().Trim().Length != 0)

                deUser.Properties["extensionAttribute2"].Value = theRow["AdminSubordinates"].ToString();

          if(theRow["AdminDelegates"].ToString().Trim().Length != 0)

                deUser.Properties["extensionAttribute3"].Value = theRow["AdminDelegates"].ToString();

          if(theRow["FunctionalSupervisor"].ToString().Trim().Length != 0)

                deUser.Properties["extensionAttribute4"].Value = theRow["FunctionalSupervisor"].ToString();

          if(theRow["FunctionalSubordinates"].ToString().Trim().Length != 0)

                deUser.Properties["extensionAttribute5"].Value = theRow["FunctionalSubordinates"].ToString();

          if(theRow["FunctionalDelegates"].ToString().Trim().Length != 0)

                deUser.Properties["extensionAttribute6"].Value = theRow["FunctionalDelegates"].ToString();

     

          deUser.CommitChanges();

    }

     

    创建DirectoryEntry对象实例:

    /// <summary>

    /// This will return a DirectoryEntry object if the user does exist

    /// </summary>

    /// <param name="UserName"></param>

    /// <returns></returns>

    public static DirectoryEntry GetUser(string UserName)

    {

          //create an instance of the DirectoryEntry

          DirectoryEntry de = GetDirectoryObject();

     

          //create instance fo the direcory searcher

          DirectorySearcher deSearch = new DirectorySearcher();

         

          deSearch.SearchRoot =de;

          //set the search filter

          deSearch.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" + UserName + "))";

          deSearch.SearchScope = SearchScope.Subtree;

       

          //find the first instance

          SearchResult results= deSearch.FindOne();

     

          //if found then return, otherwise return Null

          if(results !=null)

          {

                de= new DirectoryEntry(results.Path,ADUser,ADPassword,AuthenticationTypes.Secure);

                //if so then return the DirectoryEntry object

                return de;

          }

          else

          {

                return null;

          }

    }

     

    具体用户界面User Interface,请参考如下Reference 1.

     

    References:

    1. Rickie, 更新Active Directory/Exchange Address Book的小工具, http://www.cnblogs.com/rickie/archive/2005/06/29/183043.html

    2. Craig Aroa, ADHelper - An Active Directory Class,

    http://www.c-sharpcorner.com/Code/2002/Sept/ADClass.asp

    3. Rickie, 基于Active Directory的用户验证, http://www.cnblogs.com/rickie/archive/2005/06/30/183700.html

    4. Rickie, Active Directory中获取用户信息, http://www.cnblogs.com/rickie/archive/2005/07/01/184289.html

     

  • 相关阅读:
    异步调用WCF的方法需要小心的地方
    常用处理字符串的SQL函数
    SQL分页的几种方式
    初学WCF需要注意的地方
    关于搭建Session服务器(转载)
    PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换
    VMware15安装Centos7超详细过程
    sql server死锁查询及清理
    html 灯笼
    相机曝光与增益
  • 原文地址:https://www.cnblogs.com/rickie/p/184927.html
Copyright © 2020-2023  润新知