📄 adservices.cs
字号:
using System;
using System.DirectoryServices;
using System.ComponentModel;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Collections;
using System.Collections.Specialized;
namespace CommonComponent.AdServices
{
/// <summary>
///
/// </summary>
public class ADServices:ILogonNTUser,IQueryList,IGroup,IUser
{
DirectoryEntry myEntry;
DirectoryEntries myEntries;
DirectorySearcher mySearcher;
DataTable myTable;
DataView myView;
DataRow myRow;
StringCollection strCollection;
StringBuilder strBuilder;
string strFilter,strErrDescription,CompanyFilter,strPropertiesToLoad;
//缺损值
const string CONST_DOMAIN = "GFG1";
const string CONST_ADSPATH = "LDAP://gfg1.esquel.com/OU=Organization,DC=gfg1,DC=esquel,DC=com";
const string CONST_STRDESCRIPTION ="";
const bool CONST_ISOVERWRITE =false;
//返回一个异常属性[只读]
public string ExceptionDesc
{
get{return strErrDescription;}
}
#region[NT验证]
/// <summary>
/// NT验证
/// </summary>
/// <param name="UserName">用户名</param>
/// <param name="Password">密码</param>
/// <param name="Domain">域名</param>
/// <returns>true|false "true"验证成功,"false"验证失败</returns>
[
Description("NT验证"), //描述
DefaultValue(false), //初始值
Browsable(true), //设置属性或者事件是否在Vs.Net的属性窗口中出现。
Localizable(true) //设置属性是否被本地化
]
bool ILogonNTUser.LogonNTUser(string UserName,string Password,string Domain)
{
string strPath = string.Format("LDAP://{0}.esquel.com",Domain);
//验证用户
myEntry = new DirectoryEntry(strPath, Domain+@"\"+UserName,Password);
try
{
int itmp = myEntry.Properties.Count;
return true;
}
catch(Exception err)
{
strErrDescription = err.ToString();
return false;
}
finally
{
strPath = null;
myEntry.Dispose();
myEntry.Close();
}
}
/// <summary>
/// NT验证[缺损为GFG1域],如果要改变域名[用户名 Domain\UserName]
/// </summary>
/// <param name="UserName">用户名 [格式:①UserName(例如:admin 默认为GFG1域) ②Domain\UserName(例如:GFG1\admin)]③Domain/UserName(例如:GFG1/admin) </param>
/// <param name="Password">密码</param>
/// <returns>true|false "true"验证成功,"false"验证失败</returns>
bool ILogonNTUser.LogonNTUser(string UserName,string Password)
{
string _Domain; //域名
string _UserName; //用户名
int _Place = 0; //记录"\"的位置
ILogonNTUser INTUser = new ADServices();
try
{
if(UserName.IndexOf(@"\") > 0)
_Place = UserName.IndexOf(@"\");
else if (UserName.IndexOf("/") > 0)
_Place = UserName.IndexOf("/");
if (_Place > 0)
{
//采用“域名\用户名”格式 或“域名/用户名”
_Domain = UserName.Substring(0,_Place);
_UserName = UserName.Substring(_Place+1,UserName.Length-_Place-1);
}
else
{
//取默认域名
_Domain = CONST_DOMAIN;
_UserName = UserName;
}
//调用方法验证
return INTUser.LogonNTUser(_UserName,Password,_Domain);
}
catch(Exception err)
{
strErrDescription = err.ToString();
return false;
}
finally
{
_Domain = null;
_UserName = null;
_Place = 0;
}
}
#endregion
#region[公司清单]
/// <summary>
/// 得到公司的清单
/// </summary>
/// <returns>DataView,字段有name[公司名],ADSPath[LDAP://地址]</returns>
DataView IQueryList.GetCompanyList()
{
CompanyFilter = "'GFG','MIS','Kindergarten','TimePC','Disable account','Disable Computer','ETF'";
strFilter = "(objectCategory=CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=esquel,DC=com)";
strPropertiesToLoad = "Name,AdsPath";
try
{
//***********执行方法************
//得到查询结果,并赋给mySearcher
GetOUList(CONST_ADSPATH,strFilter,strPropertiesToLoad,SearchScope.OneLevel);
//通过mySearcher的值创建一张表
NewTable(mySearcher);
//*******************************
myView = myTable.DefaultView;
myView.RowFilter = "not name in ("+CompanyFilter+")";
myView.Sort="name";
myEntry.Close();
mySearcher.Dispose();
mySearcher.Dispose();
}
catch(Exception err)
{
strErrDescription = err.ToString();
}
return myView;
}
/// <summary>
/// 得到公司清单
/// </summary>
/// <returns>返回一个数组</returns>
StringCollection IQueryList.GetCompanyArr()
{
CompanyFilter = "GFG,MIS,Kindergarten,TimePC,Disable account,Disable Computer,ETF";
strFilter = "(objectCategory=CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=esquel,DC=com)";
strPropertiesToLoad = "Name";
strCollection = new StringCollection();
try
{
//***********执行方法************
//得到查询结果,并赋给mySearcher
GetOUList(CONST_ADSPATH,strFilter,strPropertiesToLoad,SearchScope.OneLevel);
//*******************************
//无效的公司字符串转成数组
char[] delimiter = ",".ToCharArray();
string[] arrCompanyFilter = CompanyFilter.Split(delimiter);
//判断是否被包含
bool isContain = false;
foreach(SearchResult res in mySearcher.FindAll())
{
//过滤无效的公司清单
foreach(string strCompanyFilter in arrCompanyFilter)
{
if (strCompanyFilter == res.Properties["name"][0].ToString())
isContain = true;
}
if (!isContain)
strCollection.Add(res.Properties["name"][0].ToString());
isContain = false;
}
}
catch(Exception err)
{
strErrDescription = err.ToString();
}
return strCollection;
}
#endregion
#region[帐号清单]
/// <summary>
/// 根据用户的条件来选择用户
/// </summary>
/// <param name="ADSPath">LDAP://地址</param>
/// <returns>DataView</returns>
DataView IQueryList.GetAccountsList(string ADSPath)
{
strFilter = "(objectClass=user)";
strPropertiesToLoad = "sAMAccountName,employeeID,sn,givenName,AdsPath";
try
{
//***********执行方法************
//得到查询结果,并赋给mySearcher
GetOUList(ADSPath,strFilter,strPropertiesToLoad,SearchScope.Subtree);
//通过mySearcher的值创建一张表
NewTable(mySearcher);
//*******************************
myView = myTable.DefaultView;
myView.RowFilter = "not sAMAccountName like '%$' ";
myEntry.Close();
mySearcher.Dispose();
}
catch(Exception err)
{
strErrDescription = err.ToString();
}
return myView;
}
/// <summary>
/// 返回帐号清单
/// </summary>
/// <param name="ADSPath">LDAP://地址</param>
/// <returns>StringCollection</returns>
StringCollection IQueryList.GetAccountsArr(string ADSPath)
{
strCollection = new StringCollection();
strFilter = "(objectClass=user)";
strPropertiesToLoad = "sAMAccountName";
try
{
//***********执行方法************
//得到查询结果,并赋给mySearcher
GetOUList(ADSPath,strFilter,strPropertiesToLoad,SearchScope.Subtree);
//*******************************
foreach(SearchResult res in mySearcher.FindAll())
{
//过滤无效的帐号
string strNTAccounts = res.Properties[strPropertiesToLoad][0].ToString();
if(strNTAccounts.IndexOf("$")<=0)
strCollection.Add(strNTAccounts);
}
myEntry.Close();
myEntry.Dispose();
mySearcher.Dispose();
}
catch(Exception err)
{
strErrDescription = err.ToString();
}
return strCollection;
}
/// <summary>
/// 返回所有的NT帐号
/// </summary>
/// <returns>DataView</returns>
DataView IQueryList.GetAccountsList()
{
IQueryList objGetAccountsList = (IQueryList)new ADServices();
return objGetAccountsList.GetAccountsList(CONST_ADSPATH);
}
/// <summary>
/// 返回帐号的清单
/// </summary>
/// <returns>StringCollection</returns>
StringCollection IQueryList.GetAccountsArr()
{
IQueryList objGetAccountsArr = (IQueryList)new ADServices();
return objGetAccountsArr.GetAccountsArr(CONST_ADSPATH);
}
#endregion
#region[用户组成员]
/// <summary>
/// 用户组的清单
/// </summary>
/// <param name="strUser">用户名</param>
/// <returns>StringCollection</returns>
StringCollection IQueryList.GetUserGroupMembershipArr(string strUser)
{
IQueryList objGetUserGroupMembershipArr = (IQueryList)new ADServices();
return objGetUserGroupMembershipArr.GetUserGroupMembershipArr(CONST_DOMAIN,strUser);
}
/// <summary>
/// 用户组的清单
/// </summary>
/// <param name="strUser">用户名</param>
/// <returns>DataView</returns>
DataView IQueryList.GetUserGroupMembershipList(string strUser)
{
IQueryList objGetUserGroupMembershipList = (IQueryList)new ADServices();
return objGetUserGroupMembershipList.GetUserGroupMembershipList(CONST_DOMAIN,strUser);
}
/// <summary>
/// 用户组的清单
/// </summary>
/// <param name="strDomain">域名</param>
/// <param name="strUser">用户</param>
/// <returns>DataView</returns>
DataView IQueryList.GetUserGroupMembershipList(string strDomain,string strUser)
{
strDomain = "LDAP://DC=" + strDomain + ",DC=esquel,DC=com";
strFilter = "(sAMAccountName=" + strUser + ")";
strPropertiesToLoad = "Name,ADsPath";
try
{
//***********执行方法************
//得到查询结果,并赋给mySearcher
GetOUList(strDomain,strFilter,strPropertiesToLoad,SearchScope.Subtree);
//*******************************
//新建列名
myTable = new DataTable();
foreach(string colName in mySearcher.PropertiesToLoad)
myTable.Columns.Add(colName,Type.GetType ("System.String"));
SearchResult res = mySearcher.FindOne();
if (null != res)
{
DirectoryEntry obUser = new DirectoryEntry(res.Path);
//调用得到组的方法
object obGroups = obUser.Invoke("Groups");
//填充数据
foreach (object ob in (IEnumerable)obGroups)
{
DirectoryEntry obGpEntry = new DirectoryEntry(ob);
myRow= myTable.NewRow();
myRow["Name"] = obGpEntry.Name.Substring(4);
myRow["ADsPath"] = obGpEntry.Path;
myTable.Rows.Add(myRow);
obGpEntry.Close();
obGpEntry.Dispose();
}
obUser.Close();
obUser.Dispose();
}
}
catch (Exception err)
{
strErrDescription = err.ToString();
}
finally
{
myEntry.Close();
myEntry.Dispose();
mySearcher.Dispose();
}
return myTable.DefaultView;
}
/// <summary>
/// 用户组的清单
/// </summary>
/// <param name="strDomain">域名</param>
/// <param name="strUser">用户名</param>
/// <returns>StringCollection</returns>
StringCollection IQueryList.GetUserGroupMembershipArr(string strDomain,string strUser)
{
strDomain = "LDAP://DC=" + strDomain + ",DC=esquel,DC=com";
strCollection = new StringCollection();
strFilter = "(sAMAccountName=" + strUser + ")";
try
{
//***********执行方法************
//得到查询结果,并赋给mySearcher
GetOUList(strDomain,strFilter,"",SearchScope.Subtree);
//*******************************
SearchResult res = mySearcher.FindOne();
if (null != res)
{
DirectoryEntry obUser = new DirectoryEntry(res.Path);
//调用得到组的方法
object obGroups = obUser.Invoke("Groups");
foreach (object ob in (IEnumerable)obGroups)
{
DirectoryEntry obGpEntry = new DirectoryEntry(ob);
strCollection.Add(obGpEntry.Name.Substring(4));
obGpEntry.Close();
obGpEntry.Dispose();
}
obUser.Close();
obUser.Dispose();
}
}
catch (Exception err)
{
strErrDescription = err.ToString();
}
finally
{
myEntry.Close();
myEntry.Dispose();
mySearcher.Dispose();
}
return strCollection;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -