- 浏览: 433531 次
- 性别:
- 来自: 唐山
文章分类
最新评论
-
hautbbs:
谢谢分享!
ASP.NET 导出Excel 和csv -
hautbbs:
感谢分享!
ASP.NET 导出Excel乱码的终极解决 -
wyf:
zcl920 写道只能说 看不懂。要发就发全 取一段出来 有什 ...
图片上绘制文字换行处理 -
zcl920:
只能说 看不懂。要发就发全 取一段出来 有什么用。
图片上绘制文字换行处理 -
380086154:
有用,谢谢。
js比较日期
如果一个公司打算使用微软的产品来构建自己的办公自动化系统,那么,建议采用主域控制的方式。那么,必然就要用到活动目录(AD),这样,IT部门就需要 为公司的每一个员工来创建域帐号。如果公司比较大的话,这是一个很大的工程。而且,我们会发现,有些工作量基本上是在重复劳动,人力资源部为了给It部门 提供人员名单,会录入一次人员的各种信息,比如姓名、工号、所属部门、部门领导、电话号码等等,那么,IT人员在拿到这张表后,他又要重新录入一次。并且 常常会因为人为的原因导致帐户中出现错误。下面,我们就用C#编写了一个创建帐户的程序。在这个程序中,它不但要创建域帐户,它还会在相应的 Exchange中创建相应的邮件帐户。通过这个程序,人力资源部门只需要按照IT部门提供的数据库格式(Access)填写相关项目就可以了。
首先,我们需要定义一些变量:
string strMemberof="";
string strUserParm="";
string strManager="";
string strScriptPath="";
string strdepartment="";
string strCompany="";
// string strAccountExp;
string defaultNC = "DC=Test,DC=net"; //这是默认的域
string alias = "";
string fullName = "";
string password = @"PassWord"; //这是默认的初始密码
string domainName = "test.net";
string strGivenName="";
//下面这个变量告诉程序将邮箱建在Exchange的哪个存储区域中
string homeMDB = "CN=Test,CN=控股公司,"
+ "CN=InformationStore,CN=MAIL,CN=Servers,"
+ "CN=First Administrative Group,CN=Administrative Groups,"
+ "CN=test,CN=Microsoft Exchange,CN=Services,"
+ "CN=Configuration,DC=Test,DC=net";
label1.Text="开始从模板中加载数据!";
//获取模板信息
我们知道,创建的一批帐户中,有许多的项目是相同的,所以,我们先创建好一个帐户作为模板,然后,通过读取这个模板的数据作为新建的帐户的相应项目的数据。
这段代码采用了Ad的查询对象:
DirectoryEntry deMb = new DirectoryEntry();
deMb.Path="LDAP://CN=模板, OU=项目组,OU=部门,DC=Test, DC=net";
strMemberof=deMb.Properties["memberof"][0].ToString();
strUserParm=deMb.Properties["UserParameters"][0].ToString();
strManager=deMb.Properties["manager"][0].ToString();
strScriptPath=deMb.Properties["scriptPath"][0].ToString();
strdepartment=deMb.Properties["department"][0].ToString();
strCompany=deMb.Properties["company"][0].ToString();
// strAccountExp=deMb.Properties["accountExpires"].Value.ToString();
deMb.Close();
label1.Text="加载数据完毕!开始从数据库中读取新建帐户信息!";
//读取数据库获取帐户信息
ADODB.Connection objConn;
ADODB.Command objCmd;
ADODB.Recordset objRs;
object objOptParm;
objOptParm="";
string str=@"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""db1.mdb"";Mode=Share Deny None;Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
objConn=new ADODB.Connection();
try
{
objConn.Open(str,"","",-1);
}
catch(SystemException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
//
}
objRs=new ADODB.Recordset();
objCmd=new ADODB.Command();
objCmd.CommandText="select * from sheet1";
objCmd.ActiveConnection=objConn;
try
{
objRs=objCmd.Execute(out objOptParm,ref objOptParm,1);
}
catch(SystemException ex)
{
objConn.Close();
MessageBox.Show(ex.Message);
}
finally
{
//
}
try
{
//开始创建帐户
//MessageBox.Show(objRs.Fields[2].Value.ToString());
DirectoryEntry container, user;
CDOEXM.IMailboxStore mailbox;
container = new DirectoryEntry("LDAP://OU=项目组,OU=部门," + defaultNC);
//读取数据
while (!objRs.EOF)
{
//读取数据
fullName=objRs.Fields[1].Value.ToString();
alias=objRs.Fields[4].Value.ToString();
strGivenName=objRs.Fields[2].Value.ToString();
label1.Text="创建帐户:"+fullName+"-"+alias+"-"+strGivenName+"检查有无重复帐号!";
//检查是否有重复的帐号
DirectoryEntry su=new DirectoryEntry("LDAP://DC=Test,DC=net");
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot=su;
searcher.Filter = "(&(objectClass=user)(sAMAccountName="+alias+"))";
searcher.SearchScope = SearchScope.Subtree;
searcher.Sort = new SortOption("givenName", SortDirection.Ascending);
SearchResultCollection results = searcher.FindAll();
if(results.Count>0)
{
//表明有重复的帐号,修改fullname和alias
fullName=fullName+strGivenName;
alias=alias+strGivenName;
}
// else
// {
//创建帐户
label1.Text="创建帐户:"+fullName+"-"+alias+"-"+strGivenName;
try
{
user = container.Children.Add("cn=" + fullName, "user");
user.Properties["sAMAccountName"].Add(alias);//帐户
user.Properties["userPrincipalName"].Add((alias+"@Test.net"));
user.Properties["givenName"].Add(strGivenName);//工号
user.Properties["sn"].Add(fullName);//姓
// user.Properties["telephoneNumber"].Add("0000");//电话
// user.Properties["mobile"].Add("00000000000");//手机
user.Properties["company"].Add(strCompany);//公司
user.Properties["department"].Add(strdepartment);//部门
// user.Properties["physicalDeliveryOfficeName"].Add("0000");
//这里要说明一下:这里是要设置帐户的到期时间,因为,根据我们的规定,如果在帐户到期之前,没有通过考试的话,那么帐户就会禁用。可是,AD中这个字段是整形的,我不知道怎么去换算它,所以就有以下这段代码,希望,有高手可以指点一下。
DateTime dt=new DateTime(2004,10,31,0,0,0,0);
long longAE=dt.Ticks;
longAE=longAE-504910656000000000;//减去8个时区
user.Properties["accountExpires"].Add(longAE.ToString());//帐号到期时间
user.Properties["msNPAllowDialin"].Value=false;//禁止拨入
user.Properties["userParameters"].Add(strUserParm);//禁止终端服务
user.Properties["scriptPath"].Add(strScriptPath);//配置文件
user.Properties["manager"].Add(strManager);//领导
user.Properties["userPassword"].Add(password);
// user.Invoke("SetPassword", new object[]{password});
user.CommitChanges();
user.Invoke("SetPassword", new object[]{password});
user.CommitChanges();
//This enables the new user.
user.Properties["userAccountControl"].Value = 0x200; //ADS_UF_NORMAL_ACCOUNT
user.CommitChanges();
//Obtain the IMailboxStore interface, create the mailbox, and commit the changes.
mailbox = (IMailboxStore)user.NativeObject;
mailbox.CreateMailbox(homeMDB);
user.CommitChanges();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
// }
label1.Text="创建帐户:"+fullName+"-"+alias+"-"+strGivenName+"创建完毕!";
objRs.MoveNext();
}
}
catch(SystemException ex)
{
objConn.Close();
MessageBox.Show(ex.Message);
}
finally
{
objRs.Close();
objConn.Close();
MessageBox.Show("ok");
}
}
关键一点就是新建用户后,先提交。然后再启用帐号,再提交。
代码如下:
/// 创建AD帐号,并且启用帐号
/// </summary>
/// <param name="orgLDAPPath"></param>
/// <param name="chsName"></param>
public static void CreateADUserSample(string orgLDAPPath, string chsName)
{
using (DirectoryEntry entry = ADHelper.GetDirectoryObject(orgLDAPPath))
{
DirectoryEntry deUser = entry.Children.Add("CN=" + chsName, "user");
deUser.Properties["sAMAccountName"].Value = "testUser001";
//string DoMain = GetDoMainNameByLDAPPath(entry.Path);
deUser.Properties["userPrincipalName"].Value = "testUser001@edsdev.com";
deUser.Properties["displayName"].Value = chsName;
deUser.Properties["sn"].Value = chsName;
deUser.Properties["givenName"].Value = chsName;
deUser.CommitChanges();
int val = (int)deUser.Properties["userAccountControl"].Value;
int val2 = ~(int)ADHelper.ADS_USER_FLAG_ENUM.ADS_UF_ACCOUNTDISABLE;
deUser.Properties["userAccountControl"].Value = val & val2;
deUser.CommitChanges();
}
}
发表评论
-
登录时记住用户名密码的实现方式
2019-06-12 15:11 3023登录的时候记住用户 ... -
CAS 实现单点登录 .NET MVC
2016-05-24 17:14 1119http://www.cnblogs.com/woxpp/p ... -
.NET开发邮件发送功能的全面教程(含邮件组件源码)
2015-03-31 09:43 1162原文地址:http://www.cnblogs.com/he ... -
开发Web组合
2015-01-04 11:39 6051、数据库操作 ORM-Dapper 2、前台界面布局采 ... -
基于 Bootstrap 构建的网站
2014-12-14 14:12 629文档,下载地址:http://v3.bootcss.com ... -
iis8 默认不支持svc解决方法
2014-09-18 18:57 777以下内容对于使用WIN2012 部署V9的时候使用。 ... -
C# 连接Oracle(利用ODP.net,不安装oracle客户端)
2014-07-11 09:37 1689C# 连接Oracle(利用ODP.net,不安装oracl ... -
C# Attribute 特性,过期特性
2014-05-27 15:18 1836通过下列过程将属性应用到代码元素。 通过从 .NE ... -
.NET画实时直方图
2011-12-30 09:37 908using System; using System.Col ... -
设置combobx选中项
2011-12-21 15:20 1023cbRole.SelectedIndex = cbRole.I ... -
文档树状结构化目录管理方法
2011-12-20 09:50 2158本文适用于附件(各类文档、图片和压缩包等,下同)比较多的 ... -
.StringTemplate替换模板
2011-11-03 10:19 1240官方下载 www.StringTemplate. ... -
WCF-IErrorHandler
2011-10-11 16:30 1039使用 IErrorHandler 接口,我们可以更深入地 ... -
ADODB.Stream instead of Scripting.FileSystemObject.
2011-07-04 08:55 1237In a Silverlight 4 OOB App (eve ... -
Scripting.FileSystemObject对象的详细技巧指南
2011-07-03 23:39 1041Scripting.FileSystemObject对象的 ... -
Stream 和 byte[] 之间的转换
2011-07-02 16:52 1062/* - - - - - - - - - - - - - ... -
常用正则表达式
2011-06-15 20:17 789正则表达式用于字符 ... -
DynamicMethod 类
2011-05-11 22:51 1154public delegate String MyMetho ... -
一个通用的快速反射方法(A General Fast Method Invoker)
2011-04-13 22:01 1520普通反射方法 MethodInfo methodIn ... -
C#操作IIS(转)可以写一个工具自己配置网站
2011-03-24 21:08 2263using System; using System.Dir ...
相关推荐
C#作为.NET框架的主要编程语言,提供了丰富的类库来与AD域进行交互。本篇文章将深入探讨如何使用C#来读取AD域中的用户名或组。 首先,我们需要导入`System.DirectoryServices`命名空间,它包含了一系列用于与AD交互...
在IT领域,特别是企业级应用开发中,"C# AD域验证"是一个常见的主题,它涉及到Windows活动目录(Active Directory, AD)与C#编程语言的集成。活动目录是Microsoft提供的一种目录服务,用于管理网络资源,如用户、...
本篇文章将详细介绍如何使用C#和.NET框架进行AD域操作,包括读取用户和组信息、创建与删除用户和组,以及移动用户到组等功能。 首先,进行AD域操作前,需要引用System.DirectoryServices命名空间,通过...
在Windows操作系统环境下,C#编程语言提供了一种强大的方式来与AD进行交互。本文将详细探讨如何使用C#读取AD域中的用户名或组,以及在实际开发中需要注意的关键点。 首先,要实现这个功能,我们需要了解两个关键的...
- 如果登录成功,创建`WindowsIdentity`对象来表示登录的用户。 - 使用`WindowsIdentity.Impersonate()`方法获取一个`WindowsImpersonationContext`对象,从而执行后续操作。 - 在模拟登录上下文中执行特定操作,...
C#是.NET框架下广泛使用的编程语言,非常适合开发与AD交互的应用程序。本篇文章将深入探讨“C# AD域信息读取工具源码”这一主题,包括其功能、实现原理以及相关的编程知识点。 首先,让我们理解什么是AD域信息读取...
它允许开发者查询、修改和创建AD对象,如执行账号查询和密码修改。 2. **账号查询**:在项目中,实现了查询Windows账户的功能。这可能涉及到使用DirectorySearcher类来执行 LDAP 查询,查找特定的用户账户。通过...
C#作为.NET框架的主要编程语言,提供了丰富的类库来与Active Directory(AD)进行交互,从而获取和操作域用户、用户组以及组织单元(OU)等信息。本篇文章将详细探讨如何使用C#来实现这一目标。 首先,我们需要引入...
本项目标题为“获取AD帐号用户邮箱源码”,意味着我们要讨论如何通过编程方式从AD中检索用户账户信息,并特别关注用户的电子邮件地址。这里我们将详细探讨相关知识点,包括AD的基本概念、访问AD的API、编程语言的...
1. **配置连接**: 首先,创建DirectoryEntry对象,指定AD服务器的连接信息,例如林名、域名或AD控制器的IP地址。同时,需要设置适当的用户名和密码,这些通常是管理员账户,用于执行操作。 2. **验证用户身份**: ...
在IT领域,尤其是在开发...以上就是关于"C# 域验证源码"的相关知识点,这个实例不仅展示了C#与AD交互的基础,还涵盖了身份验证流程中的关键环节,对于学习和理解如何在C#环境中实现安全的用户管理具有很高的参考价值。
总之,使用C#在网站中添加Google Ad需要理解AdWords和AdSense的工作原理,创建广告单元,获取并集成AdSense代码,以及可能的API交互。通过合理的布局和策略,可以有效地利用Google Ad为你的网站带来收益。
课程要求·???????? 至少熟悉一门开发语言,如C#,Java,PHP等 ·?...C# + ASP.NET MVC开发经验 ... 课程将由浅入深带领大家学习基于微软Azure和Office 365的... 使用AzurePortal创建Azure AD应用程序 u? 使用Powershell创建
它包括用户、角色、登录等管理,支持多种存储选项,如SQL Server、SQLite或Azure AD。 5. **创建用户**:使用Identity框架的UserManager类,调用`CreateAsync`方法创建新用户,同时可以设置密码哈希策略,确保密码...
ASP允许开发者创建动态网页,处理用户输入,连接数据库,并执行其他服务器端任务。登录页面的账号和密码分别为"admin"和"admin",这可能是默认的或者预设的管理员账户,供初次使用时登录后台。 后台管理系统是新闻...
这个项目旨在创建一个安全、可扩展且用户友好的Web应用程序,通过Azure AD B2C进行身份验证和授权。 Azure Active Directory B2C (Azure AD B2C) 是微软提供的一个全面的身份管理解决方案,特别适合面向消费者的...
然后,创建一个新的广告单元(Ad Unit),为每种类型的广告(如视频、插屏)指定一个唯一的ID。 4. **集成广告代码**: 在Unity的C#脚本中,你需要引用Unity Ads的API,例如`using UnityEngine.Advertisements;`。...