.net操作AD域

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.DirectoryServices;
namespace OperateADLibrary
{
    public class OperateAD
    {
        /// <summary>
        /// 域名
        /// </summary>
        private string _domain;
        /// <summary>
        /// 主机域IP
        /// </summary>
        private string _domainIp;
        /// <summary>
        /// 管理员账号
        /// </summary>
        private string adminUser;
        /// <summary>
        /// 管理员密码
        /// </summary>
        private string adminPwd;
        /// <summary>
        /// 路径的最前端
        /// </summary>
        private string _ldapIdentity;
        /// <summary>
        /// 路径的最后端
        /// </summary>
        private string _suffixPath;
        #region 构造函数
        /// <summary>
        /// 构造函数
        /// 从webConfig的AppSettings属性读取值初始化字段
        /// </summary>
        public OperateAD(string domain, string domainIp, string adUser, string adPwd)
        {
            //_domain = System.Configuration.ConfigurationManager.AppSettings["Domain"].ToString();
            //_domainIp = System.Configuration.ConfigurationManager.AppSettings["DomainIp"].ToString();
            //adminUser = System.Configuration.ConfigurationManager.AppSettings["ADAdminUser"].ToString();
            //adminPwd = System.Configuration.ConfigurationManager.AppSettings["ADAdminPassword"].ToString();
            //_ldapIdentity = "LDAP://" + _domainIp + "/";
            //_suffixPath = "DC=" + _domain + ",DC=COM";
            //_domain = "bdxy";
            //_domainIp = "10.1.209.197";
            //adminUser = "administrator";
            //adminPwd = "123456";
            _domain = domain;
            _domainIp = domainIp;
            adminUser = adUser;
            adminPwd = adPwd;
            _ldapIdentity = "LDAP://" + _domainIp + "/";
            _suffixPath = "DC=" + _domain + ",DC=com";
        }
        #endregion
        #region 组织结构下添加AD账户
        /// <summary>
        /// 添加AD账户
        /// </summary>
        /// <param name="organizeName">组织名称</param>
        /// <param name="user">域账户</param>
        /// <returns>添加是否成功</returns>
        public bool AddADAccount(string organizeName, DomainUser user)
        {
            DirectoryEntry entry = null;
            try
            {
                if (ExitOU(organizeName) && user != null)
                {
                    entry = new DirectoryEntry(GetOrganizeNamePath(organizeName), adminUser, adminPwd, AuthenticationTypes.Secure);
                    //增加账户到域中
                    DirectoryEntry NewUser = entry.Children.Add("CN=" + user.UserName, "user");
                    NewUser.Properties["sAMAccountName"].Add(user.UserName); //account
                    NewUser.Properties["userPrincipalName"].Value = user.UserPrincipalName; //user logon name,[email protected]
                    NewUser.Properties["givenName"].Value = "New User";//名
                    NewUser.Properties["initials"].Value = "Ms";
                    NewUser.Properties["name"].Value = "12";//full name
                    NewUser.Properties["sn"].Value = user.UserId;
                    NewUser.Properties["displayName"].Value = user.UserName;
                    NewUser.Properties["company"].Value = "1234";
                    NewUser.Properties["physicalDeliveryOfficeName"].Value = user.PhysicalDeliveryOfficeName;
                    NewUser.Properties["Department"].Value = user.Department;
                    if (user.Telephone != null && user.Telephone != "")
                    {
                        NewUser.Properties["telephoneNumber"].Value = user.Telephone;
                    }
                    if (user.Email != null && user.Email != "")
                    {
                        NewUser.Properties["mail"].Value = user.Email;
                    }
                    if (user.Description != null && user.Description != "")
                    {
                        NewUser.Properties["description"].Value = user.Description;
                    }
                    NewUser.CommitChanges();
                    //设置密码
                    //反射调用修改密码的方法(注意端口号的问题  端口号会引起方法调用异常)
                    NewUser.Invoke("SetPassword", new object[] { user.UserPwd });
                    //默认设置新增账户启用
                    NewUser.Properties["userAccountControl"].Value = 0x200;
                    NewUser.CommitChanges();
                    //DomainUser._success = "账户添加成功!";
                    return true;
                }
                else
                {
                    //DomainUser._failed = "在域中不存在直属组织单位";
                    return false;
                }
              
            }
            catch (System.DirectoryServices.DirectoryServicesCOMException ex)
            {
                //DomainUser._failed = "账户添加失败!"+ex.Message.ToString();
                return false;
            }
            finally
            {
                if (entry != null)
                {
                    entry.Dispose();
                }
            }
        }
        #endregion
        #region 重命名账户
        /// <summary>
        /// 重命名账户
        /// </summary>
        /// <param name="adminUser">管理员名称</param>
        /// <param name="adminPassword">管理员密码</param>
        /// <param name="oldUserName">原用户名</param>
        /// <param name="newUserName">新用户名</param>
        public bool RenameUser(string oldUserName, string newUserName)
        {
            try
            {
                DirectoryEntry userEntry = FindObject("user", oldUserName);
                if (userEntry != null)
                {
                    userEntry.Rename("CN="+newUserName);
                    userEntry.CommitChanges();
                    //DomainUser._success = "重命名成功!";
                    return true;
                }
                //DomainUser._failed = "没找到用户!" + oldUserName;
                return false;
            }
            catch (Exception ex)
            {
                //DomainUser._failed = "重命名失败!"+ex.Message.ToString();
                return false;
            }
        }
        #endregion
        #region 设置用户密码
        /// <summary>
        /// 设置用户密码
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        public bool SetUserPassword(string userName, string password)
        {
            try
            {
                DirectoryEntry userEntry = FindObject("user", userName);
                if (userEntry != null)
                {
                    userEntry.Invoke("SetPassword", new object[] { password });
                    userEntry.CommitChanges();
                    //DomainUser._success = "密码设置成功!";
                    return true;
                }
                //DomainUser._failed = "没找到用户!" + userName;
                return false;
            }
            catch (Exception ex)
            {
                //DomainUser._failed = "密码设置失败!"+ex.Message.ToString();
                return false;
            }
        }
        #endregion
        #region 修改密码
        /// <summary>
        /// 修改密码
        /// </summary>
        /// <param name="ude">用户</param>
        /// <param name="password">旧密码</param>
        /// <param name="password">新密码</param>
        public  bool ChangePassword(string username, string oldpwd, string newpwd)
        {
            try
            {
                DirectoryEntry entry = FindObject("user", username);
                if (entry != null)
                {
                    // to-do: 需要解决密码策略问题
                    entry.Invoke("ChangePassword", new object[] {oldpwd, newpwd });
                    entry.CommitChanges();
                    entry.Close();
                   // DomainUser._success = "密码修改成功!";
                    return true;
                }
                else
                {
                   // DomainUser._failed = "没找到用户!" + username;
                    return false;
                }
            }
            catch (Exception ex)
            {
                //DomainUser._failed = "密码修改失败!"+ex.Message.ToString();
                return false;
            }
        }
        #endregion
        #region 删除账户
        /// <summary>
        /// 删除AD账户,使用当前上下文的安全信息
        /// </summary>
        /// <param name="userName">用户名称</param>
        public bool DeleteADAccount(string userName)
        {
            try
            {
                DirectoryEntry user = FindObject("user", userName);
                if (user != null)
                {
                    using (DirectoryEntry de = new DirectoryEntry(user.Parent.Path, adminUser, adminPwd))
                    {
                        de.Children.Remove(user);
                        de.CommitChanges();
                        //DomainUser._success = "账户删除成功!";
                        return true;
                    }
                }
               // DomainUser._failed = "未找到账户!";
                return false;
            }
            catch (Exception ex)
            {
                //DomainUser._failed = "账户删除失败!" + ex.Message.ToString();
                return false;
            }
        }
        #endregion

转载:http://www.cnblogs.com/VicHuang/p/3753555.html

.net操作AD域

时间: 2024-10-13 16:34:27

.net操作AD域的相关文章

JAVA使用Ldap操作AD域

项目上遇到的需要在集成 操作域用户的信息的功能,第一次接触ad域,因为不了解而且网上其他介绍不明确,比较费时,这里记录下. 说明: (1). 特别注意:Java操作查询域用户信息获取到的数据和域管理员在电脑上操作查询的数据可能会存在差异(同一个意思的表示字段,两者可能不同). (2). 连接ad域有两个地址: ldap://XXXXX.com:389 和 ldap://XXXXX.com:636(SSL). (3). 端口389用于一般的连接,例如登录,查询等非密码操作,端口636安全性较高,用

AD域相关的属性和C#操作AD域

 “常规”标签  姓 Sn 名 Givename 英文缩写 Initials 显示名称 displayName 描述 Description 办公室 physicalDeliveryOfficeName  电话号码 telephoneNumber 电话号码:其它 otherTelephone 多个以英文分号分隔 电子邮件 Mail 网页 wWWHomePage 网页:其它 url 多个以英文分号分隔 “地址”标签  国家/地区 C 如:中国CN,英国GB 省/自治区 St  市/县 L 街道 s

利用LDAP操作AD域

LDAP操作代码样例  初始化LDAP 目录服务上下文 该例子中,我们使用uid=linly,ou=People,dc=jsoso,dc=net这个账号,链接位于本机8389端口的LDAP服务器(ldap://localhost:8389),认证方式采用simple类型,即用户名/密码方式. private static void initialContext() throws NamingException{    if(singleton == null){     singleton =

Java使用LdAP获取AD域用户

随着我们的习大大上台后,国家在网络信息安全方面就有了很明显的改变!所以现在好多做网络信息安全产品的公司和需要网络信息安全的公司都会提到用AD域服务器来验证,这里就简单的研究了一下! 先简单的讲讲AD域和LdAP目录访问协议:AD(active directory)活动目录,动态的建立整个域模式网络中的对象的数据库或索引,协议为LDAP,安装了AD的服务器称为DC域控制器,存储整个域的对象的信息并周期性更新!其中的对象分为三大类--资源(如印表机).服务(如电子邮件).和人物(即帐户或用户,以及组

AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作

博客地址:http://www.moonxy.com 关于AD 域服务器搭建及其使用,请参阅:AD 域服务简介(一) - 基于 LDAP 的 AD 域服务器搭建及其使用 Java 获取 AD 域用户,请参阅:AD 域服务简介(二)- Java 获取 AD 域用户 一.前言 在日常的开发中,为了实现单点登录,需要对域用户进行增删改查操作,以维持最新的用户信息,确保系统的安全. 二.Java 对 AD 域用户的增删改查操作 package com.moonxy.ad; import java.uti

C# 关于AD域的操作 (首博)

前段时间(因为懒得找具体的时间了)公司说让系统可以进行对AD域的操作,包括创建用户.于是上网查资料,了解何为AD域.还不知道的这边请https://www.cnblogs.com/cnjavahome/p/9029665.html. 网上有很多提供对AD域操作的帮助类,简称ADHelper.等会我也发一个.使用网上的帮助类的时候我遇到几个问题.这就是我为什么写这个随笔的原因. 问题1:创建用户的时候提示以下错误. 有几种原因:密码错误,不满足密码复杂度(长度至少7,且含有英文数字特殊符号),对账

C#获取AD域中计算机和用户的信息

如果你的计算机加入了某个AD域,则可以获取该域中所有的计算机和用户的信息. 所用程序集,需要.Net Framework 4. 添加程序集引用 System.DirectoryServices.AccountManagement 获取AD域名称,未加入AD域的,只能获取计算机名称. 如果未加入任何域,则后续的获取域用户.计算机等操作将无法进行,实例化域上下文对象时,会抛出异常. 1 IPGlobalProperties ipGlobalProperties = IPGlobalPropertie

Samba通过ad域进行认证并限制空间大小《转载》

本文实现了samba服务被访问的时候通过windows域服务器进行用户名和密码验证;认证通过的用户可以自动分配500M的共享空间;在用户通过windows域登陆系统的时候可以自动把这块空间映射成一块硬盘.环境说明:文件服务器用的Centos5.3,域控用的Win2k3 sp2,Domain是rainbird.net.Centos5.3:Name:FilesrvIP:192.168.1.245Dns:192.168.1.241Samba:3.0.33-3.7.el5Win2k3:Name:ad1I

AD域的安装

标签:张兆森  题目:  安装AD主域,可提供的操作, 可以集中管理,便捷的访问网络资源,可以随着公司扩大而扩展. (1) 先要配置电脑上的IP地址,DNS的地址要指向自己 1.安装AD, 在开始运行中输入"dcpromo"命令, 2.选择下一步,选择"在新林中新建域" 3.输入域名,结尾是.com.列:benet.com 4.林功能级别选择server 2008或者更高 5.DNS选项必须勾上,这是用来解析DNS地址的 6.这是选择"是" 7.