直接上干货,核心代码如下,读取出来相应的用户清单到DataTable中。需要其它字段可以自己增加,别忘了引用using System.DirectoryServices。

 #region private DataTable GetData(int pageIndex, int pageSize, out int recordCount) 获取数据

     /// <summary>
/// 获取数据
/// </summary>
private DataTable GetData(int pageIndex, int pageSize, out int recordCount)
{
string ldapPath = this.txtLDAPPath.Text.Trim();
string ldapDomain = this.txtLDAPDomain.Text.Trim();
string ldapUserName = this.txtLDAPUserName.Text.Trim();
string ldapPassword = this.txtLDAPPassword.Text.Trim();
string searchValue = this.txtSearch.Text.Trim(); //总记录数量
int iRecordCount = ;
//BaseUserManager manager = new BaseUserManager(this.UserCenterDbHelper, this.UserInfo);
//自定义LDAP用户表
DataTable dtLdapUser = null;
dtLdapUser = new DataTable();
DataColumn[] columns =
{
new DataColumn(BaseUserEntity.FieldId),
new DataColumn(BaseUserEntity.FieldUserName),
new DataColumn(BaseUserEntity.FieldRealName),
new DataColumn(BaseUserEntity.FieldUserFrom)
};
dtLdapUser.Columns.AddRange(columns);
try
{
// 读取用户
using (var de = new DirectoryEntry())
{
de.Path = ldapPath;
if (!string.IsNullOrEmpty(ldapUserName))
{
if (string.IsNullOrEmpty(ldapDomain))
{
de.Username = ldapUserName;
}
else
{
de.Username = ldapDomain + "\\" + ldapUserName;
}
}
//密码为空就默认不验证用户密码
if (!string.IsNullOrEmpty(ldapPassword))
{
de.Password = ldapPassword;
de.AuthenticationType = AuthenticationTypes.Secure;
}
//刷新缓存
de.RefreshCache(); using (DirectorySearcher searcher = new DirectorySearcher())
{
searcher.SearchRoot = de;
searcher.Filter = "(objectClass=user)";
searcher.SearchScope = SearchScope.Subtree; //需要导入的属性
//登录名
searcher.PropertiesToLoad.Add("userprincipalname");
//姓名
searcher.PropertiesToLoad.Add("name"); //定义排序方式
searcher.Sort = new SortOption("givenName", System.DirectoryServices.SortDirection.Ascending); SearchResultCollection results = searcher.FindAll();
int i = ;
foreach (SearchResult result in results)
{
DataRow row = dtLdapUser.NewRow(); ResultPropertyCollection props = result.Properties;
string[] userNameArray = null;
if (props.PropertyNames != null)
{
foreach (string propName in props.PropertyNames)
{
if (propName == "userprincipalname")
{
userNameArray = props[propName][].ToString().Split('@');
//只保留@前的用户名
row[BaseUserEntity.FieldUserName] = userNameArray[].ToString();
}
if (propName == "name")
{
row[BaseUserEntity.FieldRealName] = props[propName][];
}
}
}
row[BaseUserEntity.FieldUserFrom] = "AD";
if (userNameArray != null && !string.IsNullOrEmpty(userNameArray[].ToString()))
{
i++;
row[BaseUserEntity.FieldId] = i;
dtLdapUser.Rows.Add(row);
}
}
}
} recordCount = dtLdapUser.Rows.Count; }
catch (Exception e)
{
recordCount = ;
}
return dtLdapUser;
}
#endregion

我还增加了LDAP(Windows AD域)用户一键导入的功能,截图如下,代码核心就是循环读取上述获取的DataTable,记得判断一下用户是否已经存在即可。

C# Webform中读取Windows AD/LDAP域用户清单的更多相关文章

  1. java web 中 读取windows图标并显示

    java web中读取windows对应文件名的 系统图标 ....显示 1.获取系统图标工具类 package utils;  import java.awt.Graphics;  import j ...

  2. 在Windows Server 2008 R2中使用web方式修改域用户账户密码

    在Windows的domain环境下,加域的客户端修改账户密码是一件很easy的事情:即使没有加域的客户端如果组织中,使用Exchange邮件系统,借助Exchange的owa也可以轻松修改账户密码. ...

  3. WINDOWS 2008 SERVER域用户自动登陆

    The user I wanted to auto-logon as didn’t have a password, this reg hack worked instead: HKEY_LOCAL_ ...

  4. Django开发文档-域用户集成登录

    项目概述: 一般在企业中,用户以WINDOWS的域用户统一的管理,所以以Django快速开发的应用,不得不集成AD域登录. 网上一般采用django-python3-ldap的库来做集成登录,但是本方 ...

  5. Window通过Web方式修改域用户密码

    如何通过web方式修改域用户密码: 1.在Windows Server 2003上,系统默认提供了iisadmpwd作为一种修改域用户密码的方式 2.在Windows Server 2008上,可以提 ...

  6. SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)

    由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...

  7. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...

  8. Windows AD域升级方

    前面的博客中我谈到了网络的基本概念和网络参考模型,今天我们来谈企业中常用的技术,Windows AD 域,今天我的笔记将重点讲解Windows AD 域的升级和迁移方法,通过3个小实验进行配置,真实环 ...

  9. windows AD域安装及必要设置

    一.安装AD域 运行dcpromo命令,安装AD域. 步骤: 1.win+R 2.dcpromo 图例: 百度百科关于“dcpromo”解释: dcpromo命令是一个“开关”命令.如果Windows ...

随机推荐

  1. iOS开发——实时监控网速(仅作参考,发现一点问题)

    开发中用到获取网速的地方,应该就两种: 1.下载速度,这种可以直接在接受数据的地方统计计算.这个就不讲了. 2.获取手机网卡的数据,可以监控网卡的进出流量,下面就是. #import "Vi ...

  2. iOS开源库--最全的整理

    youtube下载神器:https://github.com/rg3/youtube-dl我擦咧 vim插件:https://github.com/Valloric/YouCompleteMevim插 ...

  3. 一、Hbase的安装

    一.Hbase配置 这个是我从网上找的一个版本,网上说配置成功. 先决条件: (1)hadoop的版本与hbase的版本要对应,主要是hadoop目录下的hadoop-core-1.0.4.jar的版 ...

  4. Spring学习---JPA配置和使用

      理论的东西如果不实践,永远不会变成自己的东西.本文将介绍用maven管理,用Hibernate作为JPA供应商,使用MYSQL数据库,配置和使用JPA.   以下代码已经上传至GITHUB.   ...

  5. IT技术网站汇总

    首先是比较著名的博客型的网站!一般来说在国外比较著名的博客基本上都是比较有影响力发起的或者建立的经常发布一些比较有思考力深入分析的文章! 博客媒体网站 1.www.ArsTechnica.com 2. ...

  6. doxygen 生成源码文档

    使用doxygen 生成源代码的文档是相当方便的,本文就简单整理下doxygen的使用说明 1. 安装 关于安装的问题不做特殊的说明,这里直接使用命令安装, 源码安装不做介绍 ubuntu: sudo ...

  7. Cookie和Session的区别、优缺点

    1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用session 3 ...

  8. JV的DOM操作

    一.基本概念 :是文档对象模型,这种模型为树模型:文档指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. :.Windows对象操作:.属性:opener:(打开当前窗口的原窗口.)dialo ...

  9. Beautifulsoup 和selenium 的查询

    Selenium There are vaious strategies to locate elements in a page. You can use the most appropriate ...

  10. python 发起HTTP请求

    因为微信公众号群发需要调用高级群发接口,其中涉及到python发起HTTP请求,现在将相关实现操作记录如下: 首先,HTTP请求分为GET和POST,如下所示: 首先是发起get 请求: # -*- ...