前段時間寫出一個程序,只是不完善,不能判斷是否存在該用戶,現在補充查找功能。
代碼不足之處,希不吝指教!
完整代碼如下:
<%@ Language=VBScript codepage="936"%>
<% Option Explicit %>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
</HEAD>
<BODY>
<%
@#程序目的:創建EXCHANGE 2000 郵箱用戶
@#程序實現方式:首先在AD(ACTIVE DIRECTORY:活動目錄)中查找是否有該用
@# 戶,如果有則提示用戶該名字已經存在,沒有則創建該用戶,
@# 并為該用戶創建郵箱。
@#程序設計:skyword, skyword@21cn.com
@#程序日期:2001-06-27
@#需要注意的問題:程序使用中,應當關注LDAP的不同。并且程序的運行需要比
@# 較主高的運行權限(我使用是管理員權限,呵呵比較不安全,
@# 大家在實際使用中要注意,不然被人竊取了帳號不要怪我。
@# 我也不太會設置),需要在IIS中設置(以前就是因為不了解
@# ,走了不少彎路:) )
@# 另外還有一種方案,查找用戶可結合數據庫查找,我想大家
@# 會更熟悉一些,只是要記得在初始數據時,要把計算機內所
@# 有的帳號都要記錄進數據庫,不然就不能準備判斷是否該用
@# 戶,因為AD只判斷是否有該用戶,而不管該在什么位置,這
@# 點大家要注意。
@# 程序是中用到一些知識點均加以注釋,希望對大家對所幫助
@# 另外需要注意的是帳號名字不能小于2位,而且不能使用中文
@# 名字.
Dim objUser
Dim objContainer
Dim objMailbox
Dim objMail
Dim recipname, recip
Dim ServerName, DomainName, emailname, FirstName, LastName, password
@#判斷用戶是否存在
Dim strQuery, objConn, objRs, strResult
@#查詢語句:語法:要找什么,即查找基(<LDAP://DC=program,DC=org>);
@#在目錄的什么地方找(&(objectCategory=person)(sAMAclearcase/" target="_blank" >ccountName=用戶
@#名))(用戶為?的用戶;找到對象的屬性(sAMAccount,ADsPath)(用戶名,
@#LDAP地址);查找的范圍(subTree:查找搜索基以下的整個子樹中)。例句
@#就是下面這句.
@#具體細節請參看《ASP3高級編程》P644,機械工業出版社(好象精華區內
@#有這本書的電子文檔,這本本書真的不錯,值得購買)
strQuery = "<LDAP://DC=program,DC=org>;(&(objectCategory=person)" & _
"(sAMAccountName=" & Request.Form ("txtUserName") & "));" & _
"sAMAccountName,ADsPath;subTree"
@#打開ADSI
Set objConn = Server.CreateObject ("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
@#下面這句是用合法用戶打開,不然查找的結果有誤,本例中使用管理員帳號
objConn.Open "Active Directory Provider","CN=Administrator, CN=users, DC=program, DC=org","skyword"
@#查找用戶是否存在,不存在則創建用戶
Set objRs = Server.CreateObject ("ADODB.Recordset")
objRs.Open strQuery, objConn
if not objRs.EOF then
strResult = False
Response.Write "用戶已經存在"
else
@#創建用戶
strResult = True
End if
objRs.Close
Set objRs = Nothing
objConn.Close
Set objConn = Nothing
If strResult = True Then
@#創建用戶的代碼
@#ServerName,DomainName是ADSI需要的LDAP信息,是必需的。
ServerName = "skyword.program.org"
DomainName = "DC=program,DC=org"
emailname = Request.Form ("txtUserName")
password = Request.Form ("txtPassword")
recip = "CN=" & emailname
@#下面這語個IF語句沒多少價值。 :)
if Request.Form ("txtTruename") <> "" then
LastName = "sky"
FirstName = "Word"
else
LastName = "Last"
FirstName = "Name"
end if
@#打開對象
Set objContainer = GetObject("LDAP://" & ServerName & "/OU=China.org," & DomainName)
@#創建帳號
Set objUser = objContainer.Create("User", recip)
objUser.Put "samAccountName", emailname @#帳號
objUser.Put "sn", LastName
objUser.Put "givenName", FirstName
objUser.Put "DisplayName", emailname @#& "@hina.org" @#顯示的名字
objUser.Put "mail", emailname & "@China.org"
objUser.Put "userPrincipalName", emailname & "@China.org" @#用戶登錄帳號
objUser.SetInfo @#寫進AD中
objUser.SetPassword password @#用戶密碼
objUser.AccountDisabled = False @#帳號生效
objUser.SetInfo @#寫進AD,一定要,為什么我也不清楚
@#創建郵箱
Set objMailbox = objUser
@#下面的LDAP是查出來的,安裝不同,LDAP會有所不同。
objMailbox.CreateMailbox "LDAP://skyword.program.org/" & _
"CN=Mailbox Store (SKYWORD),CN=First Storage Group," & _
"CN=InformationStore,CN=SKYWORD,CN=Servers," & _
"CN=First Administrative Group,CN=Administrative Groups," & _
"CN=ecitye,CN=Microsoft Exchange,CN=Services," & _
"CN=Configuration,DC=program,DC=org"
objUser.SetInfo
Set objContainer = Nothing
Set objUser = Nothing
Set objMailbox = Nothing
@#下面是簡單的錯誤處理。
if err <> 0 then
Response.Write "創建用戶失??!請重試一次<br>"
Response.Write "<input type=@#button@# value=@#重試一次@# onclick=@#vbscript:history.back()@#> "
Response.Write "<input type=@#button@# value=@#返回@# onclick=@#vbscript:window.location.href=index.html@#>"
else
@#以下是簡單的測試
Set objMail = Server.CreateObject ("CDONTS.NewMail")
objMail.Send "Admins@china.org", emailname & "@china.org", "Welcome", "Welcome use China.org Mail"
set objMail = Nothing
Response.Write emailname & "用戶已經成功創建!!!!" & "<br>三秒后導向登錄頁!"
Response.AddHeader "refresh","3;url=http://mail.china.org"
end if
End If
%>
</BODY>
</HTML>