接上篇 Windows Server 2008 R2 配置AD(Active Directory)域控制器
对AD域结合常见需求用C#进行一些读取信息的操作^_^!
目录
- 示例准备
- 知识了解
- 读取AD域信息示例
- DirectorySearcher.Filter属性扩充说明
- 用户属性扩充说明(含图文属性对照)
- 常规
- 地址
- 帐户
- 电话
- 组织
- 示例下载
示例准备
- 打开上一篇文章配置好的AD域控制器
- 开始菜单-->管理工具-->Active Directory 用户和计算机
- 新建组织单位和用户
- 新建层次关系如下:
知识了解
我们要用C#访问Active Directory非常容易,主要用到
轻量目录访问协议 (LDAP)
System.DirectoryServices命名空间下的两个组件类
DirectoryEntry和DirectorySeacher
读取AD域信息示例
示例在Framework 3.5下用Winform程序编写
主要结合常见需求读取组织单位(OU)及用户(User)信息,以及同步组织单位和用户的层次关系;
比较着重的还是用户的信息,特别是帐号、邮箱、SID等信息;
- 下面我们开始连接域,并读取出示例准备中键好的组织单位和用户
首先编写代码用LDAP尝试对域进行访问
形式:LDAP://Domain
/// <summary>
/// 功能:是否连接到域
/// 作者:Wilson
/// 时间:2012-12-15
/// http://msdn.microsoft.com/zh-cn/library/system.directoryservices.directoryentry.path(v=vs.90).aspx
/// </summary>
/// <param name="domainName">域名或IP</param>
/// <param name="userName">用户名</param>
/// <param name="userPwd">密码</param>
/// <param name="entry">域</param>
/// <returns></returns>
private bool IsConnected(string domainName, string userName, string userPwd, out DirectoryEntry domain)
{
domain = new DirectoryEntry();
try
{
domain.Path = string.Format("LDAP://{0}", domainName);
domain.Username = userName;
domain.Password = userPwd;
domain.AuthenticationType = AuthenticationTypes.Secure;
domain.RefreshCache();
return true;
}
catch(Exception ex)
{
LogRecord.WriteLog("[IsConnected方法]错误信息:" + ex.Message);
return false;
}
}
#endregion
传用参数,调IsConnected方法,结果如下
- 连接上AD域后,接着我们找到根OU
/// <summary>
/// 功能:域中是否存在组织单位
/// 作者:Wilson
/// 时间:2012-12-15
/// </summary>
/// <param name="entry"></param>
/// <param name="ou"></param>
/// <returns></returns>
private bool IsExistOU(DirectoryEntry entry, out DirectoryEntry ou)
{
ou = new DirectoryEntry();
try
{
ou = entry.Children.Find("OU=" + txtRootOU.Text.Trim());
return (ou != null);
}
catch(Exception ex)
{
LogRecord.WriteLog("[IsExistOU方法]错误信息:" + ex.Message);
return false;
}
}
#endregion
传入以数,调用IsExistOU方法,结果如下
- 下面来开始读取组织单位及用户的信息。
示例为了看出层次关系及导出信息是类型区分,给OU和User新建了一个实体类和一个类型的枚举
/// <summary>
/// 类型
/// </summary>
public enum TypeEnum : int
{
/// <summary>
/// 组织单位
/// </summary>
OU = 1,
/// <summary>
/// 用户
/// </summary>
USER = 2
}
#endregion
#region## Ad域信息实体
/// <summary>
/// Ad域信息实体
/// </summary>
public class AdModel
{
public AdModel(string id, string name, int typeId, string parentId)
{
Id = id;
Name = name;
TypeId = typeId;
ParentId = parentId;
}
public string Id { get; set; }
public string Name { get; set; }
public int TypeId { get; set; }
public string ParentId { get; set; }
}
#endregion
下面读取信息
#region## 同步
/// <summary>
/// 功能:同步
/// 创建人:Wilson
/// 创建时间:2012-12-15
/// </summary>
/// <param name="entryOU"></param>
public void SyncAll(DirectoryEntry entryOU)
{
DirectorySearcher mySearcher = new DirectorySearcher(entryOU, "(object); //查询组织单位
DirectoryEntry root = mySearcher.SearchRoot; //查找根OU
SyncRootOU(root);
StringBuilder sb = new StringBuilder();
sb.Append("\r\nID\t帐号\t类型\t父ID\r\n");
foreach (var item in list)
{
sb.AppendFormat("{0}\t{1}\t{2}\t{3}\r\n", item.Id, item.Name, item.TypeId, item.ParentId);
}
LogRecord.WriteLog(sb.ToString());
MessageBox.Show("同步成功", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Exit();
}
#endregion
#region## 同步根组织单位
/// <summary>
/// 功能: 同步根组织单位
/// 创建人:Wilson
/// 创建时间:2012-12-15
/// </summary>
/// <param name="entry"></param>
private void SyncRo
jquery中
$("#<%=StoreName.ClientID %>").focus(function() {
$("#<%=Label5.ClientID %>").val("请输入真实的店铺名称");
$("#<%=Label5.ClientID %>").css("color", "#666");
});
html中
<table>
<tr>
<td>
店铺名称:
</td>
<td>
<asp:TextBox ID="StoreName" runat="server"></asp:TextBox>
</td>
<td>
<asp:Label ID="Label5" runat="server" Text=" 真实的店铺名称,0-10个字。(必填项)"></asp:Label>
</td>
</tr>
</table>
本文链接
m11,m12,m21.m22是控制角度的
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>DIV旋转属性的演示</title>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
<style type="text/css">
body {
font-family: "Arial", sans-serif;
}
#example {
position: absolute;
border: #09F solid 1px;
font-weight: 900;
padding: 10px;
display: block;
width: 500px;
height: 400px;
margin-top: -1px;
margin-left: -1px;
transform: rotate(40deg);
-o-transform: rotate(40deg);
-webkit-transform: rotate(40deg);
-moz-transform: rotate(40deg);
filter: progid:DXImageTransform.Microsoft.Matrix(sizingMethod='auto expand', M11=1.2660444431189777, M12=-0.3327876096865394, M21=0.1127876096865398, M22=0.9660444431189779);
}
</style>
<!--[if IE]>
<style type="text/css">
#example {
top: 50px;
left: 50px;
}
</style>
<![endif]-->
</head>
<body>
<div id="example"> 旋转成功</div>
</body>
</html>
本文链接