程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 企業信息化系統基礎——AD:使用C#批量創建帳號

企業信息化系統基礎——AD:使用C#批量創建帳號

編輯:關於C語言
如果一個公司打算使用微軟的產品來構建自己的辦公自動化系統,那麼,建議采用主域控制的方式。那麼,必然就要用到活動目錄(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");
}


}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved