`
wyf
  • 浏览: 433583 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

AD 对用户和组织的操作参考

阅读更多
第一个类,获取AD实例类;

AdHerlp.cs

public static class AdHerlp
{
#region 创建AD连接
/// <summary>
/// 创建AD连接
/// </summary>
/// <returns></returns>
public static DirectoryEntry GetDirectoryEntry()
{
DirectoryEntry de = new DirectoryEntry();
de.Path = "LDAP://qjyczsgl/CN=Users,DC=qjyczsgl,DC=com";
de.Username = @"qjyczsgl\zsgl";
de.Password = "qjyczsgl";
return de;
}
#endregion

#region 获取目录实体集合
/// <summary>
///
/// </summary>
/// <param name="DomainReference"></param>
/// <returns></returns>
public static DirectoryEntry GetDirectoryEntry(string DomainReference)
{
DirectoryEntry entry = new DirectoryEntry("LDAP://qjyczsgl" + DomainReference, "zsgl", "qjyczsgl", AuthenticationTypes.Secure);
return entry;
}
#endregion
}

AD操作类

myDirectory.cs

class myDirectory
{

/// <summary>
/// 判断用户是否存在
/// </summary>
/// <param name="UserName"></param>
/// <returns></returns>
public bool UserExists(string UserName)
{
DirectoryEntry de = AdHerlp.GetDirectoryEntry();
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(&(objectClass=user) (cn=" + UserName + "))";
SearchResultCollection results = deSearch.FindAll();
if (results.Count == 0)
{
return false;
}
else
{
return true;
}
}
/// <summary>
/// 修改用户属性
/// </summary>
/// <param name="de"></param>
/// <param name="PropertyName"></param>
/// <param name="PropertyValue"></param>
public static void SetProperty(DirectoryEntry de, string PropertyName, string PropertyValue)
{
if (PropertyValue != null)
{
if (de.Properties.Contains(PropertyName))
{
de.Properties[PropertyName][0] = PropertyValue;
}
else
{
de.Properties[PropertyName].Add(PropertyValue);
}
}
}

/// <summary>
/// 生成随机密码
/// </summary>
/// <returns></returns>
public string SetSecurePassword()
{
//RandomPassword rp = new RandomPassword();
return RandomPassword.Generate(8, 8);
}

/// <summary>
/// 设置用户新密码
/// </summary>
/// <param name="path"></param>
public void SetPassword(string path)
{
DirectoryEntry usr = new DirectoryEntry();
usr.Path = path;
usr.AuthenticationType = AuthenticationTypes.Secure;
object[] password = new object[] { SetSecurePassword() };
object ret = usr.Invoke("SetPassword", password);
usr.CommitChanges();
usr.Close();
}

/// <summary>
/// 启用用户帐号
/// </summary>
/// <param name="de"></param>
private static void EnableAccount(DirectoryEntry de)
{
//UF_DONT_EXPIRE_PASSWD 0x10000
int exp = (int)de.Properties["userAccountControl"].Value;
de.Properties["userAccountControl"].Value = exp | 0x0001;
de.CommitChanges();
//UF_ACCOUNTDISABLE 0x0002
int val = (int)de.Properties["userAccountControl"].Value;
de.Properties["userAccountControl"].Value = val & ~0x0002;
de.CommitChanges();
}

/// <summary>
/// 添加用户到组
/// </summary>
/// <param name="de"></param>
/// <param name="deUser"></param>
/// <param name="GroupName"></param>
public static void AddUserToGroup(DirectoryEntry de, DirectoryEntry deUser, string GroupName)
{
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
deSearch.Filter = "(&(objectClass=group) (cn=" + GroupName + "))";
SearchResultCollection results = deSearch.FindAll();

bool isGroupMember = false;

if (results.Count > 0)
{
DirectoryEntry group = AdHerlp.GetDirectoryEntry(results[0].Path);

object members = group.Invoke("Members", null);
foreach (object member in (IEnumerable)members)
{
DirectoryEntry x = new DirectoryEntry(member);
if (x.Name != deUser.Name)
{
isGroupMember = false;
}
else
{
isGroupMember = true;
break;
}
}

if (!isGroupMember)
{
group.Invoke("Add", new object[] { deUser.Path.ToString() });
}
group.Close();
}
return;
}

/// <summary>
/// 创建一个新用户
/// </summary>
/// <param name="employeeID"></param>
/// <param name="name"></param>
/// <param name="login"></param>
/// <param name="email"></param>
/// <param name="group"></param>
public void CreateNewUser(string employeeID, string name, string login, string email, string group)
{
//Catalog catalog = new Catalog();
DirectoryEntry de =AdHerlp.GetDirectoryEntry();

/// 1. Create user account
DirectoryEntries users = de.Children;
DirectoryEntry newuser = users.Add("CN=" + login, "user");

/// 2. Set properties
SetProperty(newuser, "employeeID", employeeID);
SetProperty(newuser, "givenname", name);
SetProperty(newuser, "SAMAccountName", login);
SetProperty(newuser, "userPrincipalName", login);
SetProperty(newuser, "mail", email);
newuser.CommitChanges();

/// 3. Set password
SetPassword(newuser.Path);
newuser.CommitChanges();

/// 4. Enable account           
EnableAccount(newuser);

/// 5. Add user account to groups
AddUserToGroup(de, newuser, group);

/// 6. Create a mailbox in Microsoft Exchange   
//GenerateMailBox(login);

newuser.Close();
de.Close();
}
/// <summary>
/// 禁用一个帐号
/// </summary>
/// <param name="EmployeeID"></param>
public void DisableAccount(string EmployeeID)
{
DirectoryEntry de =AdHerlp.GetDirectoryEntry();
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&(objectCategory=Person)(objectClass=user)(employeeID=" + EmployeeID + "))";
ds.SearchScope = SearchScope.Subtree;
SearchResult results = ds.FindOne();

if (results != null)
{
DirectoryEntry dey = AdHerlp.GetDirectoryEntry(results.Path);
int val = (int)dey.Properties["userAccountControl"].Value;
dey.Properties["userAccountControl"].Value = val | 0x0002;
dey.Properties["msExchHideFromAddressLists"].Value = "TRUE";
dey.CommitChanges();
dey.Close();
}

de.Close();
}
/// <summary>
/// 修改用户信息
/// </summary>
/// <param name="employeeID"></param>
/// <param name="department"></param>
/// <param name="title"></param>
/// <param name="company"></param>
public void ModifyUser(string employeeID, string department, string title, string company)
{
DirectoryEntry de = AdHerlp.GetDirectoryEntry();
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&(objectCategory=Person)(objectClass=user)(employeeID=" + employeeID + "))";
ds.SearchScope = SearchScope.Subtree;
SearchResult results = ds.FindOne();

if (results != null)
{
DirectoryEntry dey = AdHerlp.GetDirectoryEntry(results.Path);
SetProperty(dey, "department", department);
SetProperty(dey, "title", title);
SetProperty(dey, "company", company);
dey.CommitChanges();
dey.Close();
}

de.Close();
}

/// <summary>
/// 检验Email格式是否正确
/// </summary>
/// <param name="mail"></param>
/// <returns></returns>
public bool IsEmail(string mail)
{
Regex mailPattern = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
return mailPattern.IsMatch(mail);
}
/// <summary>
/// 搜索被修改过的用户
/// </summary>
/// <param name="fromdate"></param>
/// <returns></returns>
public DataTable GetModifiedUsers(DateTime fromdate)
{
DataTable dt = new DataTable();
dt.Columns.Add("EmployeeID");
dt.Columns.Add("Name");
dt.Columns.Add("Email");

DirectoryEntry de = AdHerlp.GetDirectoryEntry();
DirectorySearcher ds = new DirectorySearcher(de);

StringBuilder filter = new StringBuilder();
filter.Append("(&(objectCategory=Person)(objectClass=user)(whenChanged>=");
filter.Append(ToADDateString(fromdate));
filter.Append("))");

ds.Filter = filter.ToString();
ds.SearchScope = SearchScope.Subtree;
SearchResultCollection results = ds.FindAll();

foreach (SearchResult result in results)
{
DataRow dr = dt.NewRow();
DirectoryEntry dey = AdHerlp.GetDirectoryEntry(result.Path);
dr["EmployeeID"] = dey.Properties["employeeID"].Value;
dr["Name"] = dey.Properties["givenname"].Value;
dr["Email"] = dey.Properties["mail"].Value;
dt.Rows.Add(dr);
dey.Close();
}

de.Close();
return dt;
}

/// <summary>
/// 格式化AD的时间
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public string ToADDateString(DateTime date)
{
string year = date.Year.ToString();
int month = date.Month;
int day = date.Day;

StringBuilder sb = new StringBuilder();
sb.Append(year);
if (month < 10)
{
sb.Append("0");
}
sb.Append(month.ToString());
if (day < 10)
{
sb.Append("0");
}
sb.Append(day.ToString());
sb.Append("000000.0Z");
return sb.ToString();
}
}

 

分享到:
评论

相关推荐

    AD5933中文参考手册_AD5933_AD5933中文参考手册_AD5933中文手册_

    在实际应用中,AD5933常被用于生物医学领域,例如心电信号分析、细胞阻抗监测和生物组织的阻抗成像。在电化学领域,它可以用于电池和燃料电池的研究,以及腐蚀监测。在材料科学中,AD5933可用于检测材料的介电性质和...

    AD用户批量导入(新增,更新)

    在"用户导入"这个压缩包文件中,可能包含了用于演示或参考的Excel模板、PowerShell脚本或其他辅助材料,帮助用户理解如何有效地进行AD用户批量导入操作。使用这些资源,IT管理员可以更加便捷地管理AD用户,提高工作...

    AD域配置详解

    AD域配置详解主要涉及到微软的Active Directory(活动目录)服务,它是一个基于目录的...这些内容不仅有助于初学者理解AD域的基本概念和作用,同时也对希望提高AD域管理效率和安全性经验丰富的IT专业人员提供了参考。

    AD域控 AD域配置详解

    **AD域控制(Active Directory Domain Services)是微软Windows Server操作系统中的关键组件,它提供了一种组织和管理网络资源的方法。AD域控使得企业能够集中管理用户账户、计算机、打印机等对象,实现身份验证、...

    AD域服务器Windows_Server_2008_AD架构

    **AD域服务器Windows Server 2008 AD架构** 在IT行业中,Active Directory(AD)域服务器是企业网络管理的核心组件。...这些文档详细介绍了Windows Server 2008 AD架构的各个方面,对IT管理员来说是宝贵的参考资料。

    AD域控制器图文教程

    在IT领域,活动目录(Active Directory, AD)是Windows Server操作系统中的核心组件,用于管理网络资源、用户账户和权限。AD域控制器是AD环境中的关键节点,负责执行身份验证、授权和目录服务。本教程特别关注AD域...

    AD教程,含4个文件,全中文

    AD是微软Windows Server操作系统中的关键组件,用于管理和组织网络资源,如用户账户、计算机账户、安全策略以及各种网络服务。以下是四个文件的详细内容: 1. **AD09教程**: 这部分教程主要针对AD的第九个版本,...

    ad5940-examples-master.zip

    3. **文档**:可能包含数据手册、用户指南、应用笔记等,详细解释了芯片的功能、操作方式和注意事项。 4. **配置文件**:可能包含配置寄存器设置的文件,用于设置芯片的工作模式和参数。 5. **测试脚本**:用于...

    批量添加域用户操作实战参考.pdf

    本篇文章是关于批量添加域用户操作的实战参考。首先,我们需要了解一些基础知识。 1. Active Directory(简称AD)是一个基于目录的服务,用于存储关于网络上的对象(如用户、组和计算机)的信息。它主要用于用户...

    深信服AD高级实验答案.zip

    这个压缩包内容对于深入了解和操作深信服AD环境,尤其是对于准备认证考试或提升实际操作技能的IT专业人员来说,是非常有价值的参考资料。通过实践和学习这些高级实验答案,可以增强对AD的深入理解,提升在企业环境中...

    AD活动目录前期建立规划方案

    活动目录(Active Directory,简称AD)是微软Windows Server操作系统提供的一项核心服务,它使用目录服务对网络资源进行组织和管理。AD允许管理员和用户轻松地查找和使用资源,同时也增强了企业内部的安全性。以下是...

    JAVA通过LDAP+SSL(证书)实现用户和组织(部门)增删改查.zip

    本文将深入探讨如何使用Java通过LDAP(轻量级目录访问协议)和SSL(安全套接层)来实现用户和组织(部门)的增删改查操作,并结合证书确保通信的安全性。这些功能通常用于大型企业的用户管理,例如Active Directory...

    AD8402-demo.rar

    描述中提到,驱动源码采用了面向对象编程(OOP)思想,这意味着代码被组织成类和对象,具有封装、继承和多态性等特性,使代码更易于理解和维护。此外,源码是基于HAL库编写的,HAL(Hardware Abstraction Layer,...

    修改普通用户权限

    - **Active Directory**:对于大型企业来说,可以通过AD进行集中化的用户管理和权限控制。 - **IAM服务**:云平台提供的身份与访问管理服务(如AWS IAM)可以帮助管理员更精细地控制用户权限。 ### 三、注意事项 #...

    电脑AD维护手册.pdf

    AD服务器日常维护是指管理员对AD服务器的日常维护和维修,以确保AD服务器的稳定运行。管理员需要了解AD服务器日常维护方法和步骤,以避免影响AD域的安全性和稳定性。 本手册提供了AD维护的综合指南,涵盖了AD的基础...

    需要导入AD的数据库.rar

    标题中的“需要导入AD的数据库.rar”表明这是一个与Active Directory(AD)相关的数据库文件,通常用于存储和管理组织内的用户账户、计算机账户以及其他资源的安全信息。这个压缩包可能包含一个或多个数据库文件,...

    DNS、AD的配置步骤[参考].pdf

    5. **创建AD用户**:在“AD用户和计算机”中,创建新的用户账户,设置登录名和复杂密码,并分配权限。 6. **客户端配置**:客户端机器需要配置静态IP地址,指定DNS服务器为AD服务器IP,如192.168.13.100。 7. **...

    AD6.0实用教程

    AD6.0是微软Windows Server操作系统的核心组件,用于构建和管理网络中的身份和访问权限,它提供了集中式目录服务,便于组织管理和控制网络资源。 在AD6.0中,我们首先会接触到的是安装和配置过程。这包括设置域控制...

    AD域控制器建立教程

    在IT领域,活动目录(Active Directory,简称AD)是一种用于管理网络环境的分布式数据库系统,由微软公司开发。它主要用于存储网络对象的...请参考提供的“域控制器建立教程.doc”文件,了解更多详细信息和操作指南。

    C#读取AD域里用户名或组.rar

    在IT领域,特别是Windows系统管理和开发中,Active Directory(AD)是用于组织和管理网络资源的重要工具。AD域服务提供了一种集中式的方式来存储、管理和验证用户身份,以及分配资源权限。本篇将深入探讨如何使用C#...

Global site tag (gtag.js) - Google Analytics