直接上干货,核心代码如下,读取出来相应的用户清单到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. jvm 配置,看看

    http://my.oschina.net/qiangzigege/blog/661757

  2. javascript alert,confirm,prompt弹框用法

    1. alert是弹出警告框,在文本里面加入\n就可以换行. 2. confirm弹出确认框,会返回布尔值,通过这个值可以判断点击时确认还是取消.true表示点击了确认,false表示点击了取消. 3 ...

  3. STM32实现HID和u盘复合设备

      USB设备可以定义一个复合设备,复合设备分两种,一种是一个设备多个配置,还有一种是一个配置多个接口,在本例中采用一个配置多个接口的方式 首先修改设备描述符,标准设备描述符和报告描述符都不需要修改, ...

  4. LPC1768IAP(详解,有上位机)

    之前说了stm32的iap编程,今天天气真好,顺手就来说说lpc1788的iap编程(没看前面的请查看stm笔记下的内容) 首先是flash的算法,lpc1768并没有寄存器来让我们操作flash,他 ...

  5. 异常捕获拒绝闪退 让应用从容的崩溃UncaughtExceptionHandler

    虽然大家都不愿意看到程序崩溃,但可能崩溃是每个应用必须面对的现实,既然崩溃已经发生,无法阻挡了,那我们就让它崩也崩得淡定点吧. IOS SDK中提供了一个现成的函数 NSSetUncaughtExce ...

  6. Xcode各版本官方下载

    官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ Xcode 66.4: http ...

  7. Java虚拟机——进度1

    Java 虚拟机       一.Java虚拟机的基本结构 ①类加载子系统:从文件系统或者网络中加载Class信息,存放在方法区中. ②方法区中存放放进来的Class信息,也包括一些运行时常量池信息包 ...

  8. javascript-array函数实例

    <script type="text/javascript"> window.onload = function () { // body... var aNew = ...

  9. linux 安装jdk及tomcat指定jdk版本推荐

    方法1:用yum命令安装 1.   查看当前jdk版本:Java –version,或者是:rpm -qa | grep jdk 2.   删除当前jdk:yum -y remove java-1.6 ...

  10. IM 融云 之 列表中显示聊天用户名称

    现在发现,聊天列表中,用户名称没有显示出来.