65.9K
CodeProject 正在变化。 阅读更多。
Home

Active Directory 工具

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.60/5 (5投票s)

2009 年 4 月 23 日

CPOL

2分钟阅读

viewsIcon

46426

downloadIcon

2477

Active Directory 工具 - 帮助管理 Active Directory 操作(查询、更新和删除),具有易于使用的 GUI

引言

该应用程序的目标是为使用 Microsoft Active Directory Services 的任何组织构建用户管理助手应用程序。

  • IT 管理员 – 以更友好、更定制化的方式获取自我定制的报告和信息
  • IT 工作人员 – 验证用户和组对象中插入的数据,对 Active Directory 进行更新,并获取自我定制的报告

背景

这是大学期末项目的一部分。

必备组件

  • 计算机上已安装 Framework 3.5(可以从 Microsoft 网站下载)
  • 连接到 Microsoft Active Directory
  • 已安装 Microsoft Office Excel(97 及更高版本)
  • 组织中已安装 Microsoft SQL Server 2005
  • 也可以通过“ini”文件而不是数据库来完成
  • 开发计算机需要安装 Microsoft patterns & practices Version=4.1.0.0

使用应用程序

步骤 1 安装数据库 (MSSQL)

打开 Microsoft-SQL 2005 并从 EmptyDB.bak(位于 zip 文件中)还原数据库。

步骤 2 运行程序

  • 编译并运行程序(DirectoryGate 项目)
  • 选择安装数据库的数据库服务器。
  • 单击“添加 - 编辑域列表”按钮并设置域
  • 开始查询/更新/删除您的 Active Directory
  • 结果在应用程序文件夹中的 Excel 文件中

关于代码

该解决方案分为 6 个项目

  1. ActiveDirectoryDO - static 类处理所有 Active Directory 操作
  2. DirectoryGate - 该 UI 是应用程序的 UI,包括应用程序的所有窗体和 UI
  3. DirectoryGateDO - static 类用于处理数据库层 - 使用 Microsoft patterns & practices 以获得最佳实践方法
  4. HandleError - static 类处理应用程序中的所有错误消息
  5. OutputToExcel - 用于将结果输出到 Excel
  6. OutputToHTML - 用于将结果输出到 HTML

ActiveDirectoryDO

CreateDirectoryEntry - 根据给定的域返回 DirectoryEntry

它用于所有更新/查询/删除 Active Directory 方法。

public static DirectoryEntry CreateDirectoryEntry(string domainADPath)
        {
            // create and return new LDAP connection with desired settings
            DirectoryEntry LDAPConnection = 
			new DirectoryEntry(domainADPath); //litwareinc.com

            string[] DomainSplit = domainADPath.Split('.');

            //LDAPConnection.Path = "LDAP://DC=litwareinc,DC=com";
            LDAPConnection.Path = "LDAP://";

            foreach (string Part in DomainSplit)
            {
                LDAPConnection.Path += "DC=" + Part + ",";
            }

            int LastCommaInd = LDAPConnection.Path.LastIndexOf(',');

            LDAPConnection.Path = LDAPConnection.Path.Remove(LastCommaInd);

            LDAPConnection.AuthenticationType = AuthenticationTypes.Secure;

            return LDAPConnection;
        }

Active Directory 查询方法的示例如下

public static void SearchObjectsInActiveDirectory(string domainADPath,
    string searchString, ref List<string> deletionObjList)
        {
            // create LDAP connection object
            using(DirectoryEntry LDAPConnection = CreateDirectoryEntry(domainADPath)){

            	using(DirectorySearcher SearchObj = 
				new DirectorySearcher(LDAPConnection)){

            		// Groups + Users Search
            		SearchObj.Filter = searchString;

            		SearchResultCollection Result = SearchObj.FindAll();

            		foreach (SearchResult SR in Result)
            		{
                			ResultPropertyCollection Fields = SR.Properties;

                			foreach (Object myCollection in Fields
							["samAccountName"])
                			{
                    			deletionObjList.Add
						(myCollection.ToString());
                			}
            		}
	   	}
	   }
        }

DirectoryGateDO  (使用 Microsoft Patterns & Practices)

用于检索数据库中所有域的 SQL 存储过程示例

   public static SqlDataReader GetDomainsFromDB()
{ 
    SqlDatabase db = new SqlDatabase(m_CStr);
        // 1.  create a command object identifying
       //     the stored procedure
        DbCommand SComm = db.GetStoredProcCommand("spGetDomainsList");
        // execute the command
        SqlDataReader SDR = (SqlDataReader)db.ExecuteReader(SComm);
        return SDR;
    }

关注点

请提出改进应用程序的建议和想法。

历史

  • 项目的 Alpha 版本
© . All rights reserved.