主頁 > 知識(shí)庫 > 使用ADSI、ASP和一對(duì)魔術(shù)戲法自動(dòng)地創(chuàng)立一個(gè)虛擬目錄的方法

使用ADSI、ASP和一對(duì)魔術(shù)戲法自動(dòng)地創(chuàng)立一個(gè)虛擬目錄的方法

熱門標(biāo)簽:怎么看地圖標(biāo)注 外呼系統(tǒng)telrobot 外呼線路中繼線是什么 合肥高德地圖標(biāo)注 深圳外呼系統(tǒng)收費(fèi) 拉薩外呼系統(tǒng)業(yè)務(wù) 廣州ai電銷機(jī)器人一般多少錢 百度地圖標(biāo)注是什么意思 外呼系統(tǒng)免費(fèi)招代理
使用ADSI、ASP和一對(duì)魔術(shù)戲法自動(dòng)地創(chuàng)立一個(gè)虛擬目錄,第二部分
Tom Moran 和 Jeff Sandquist
1999年2月22日 


我們回來了。大家翹首以盼的這篇文章的第二部分現(xiàn)在在這兒。并且我想你將花費(fèi)整個(gè)晚上看你的貓清洗自己。

這個(gè)月,Jeff Sandquist和我完成了我們的動(dòng)態(tài)目錄服務(wù)接口(Active Directory Services Interfaces ,ADSI)應(yīng)用程序。如果你來晚了一點(diǎn),沒有問題;只要見這個(gè)系列的Part 1 http://www.microsoft.com/workshop/server/asp/server012599.asp 。上個(gè)月,我們確認(rèn)一個(gè)用戶作為特權(quán)組的成員。接著我們顯示了一個(gè)表單,表單上包括一個(gè)帶有該特殊用戶組中每個(gè)人用戶名的列表框。這個(gè)表單允許我們選取一個(gè)用戶,并且為這個(gè)用戶的新的虛擬目錄選擇權(quán)限?,F(xiàn)在我們將由這個(gè)表單獲取數(shù)據(jù)并在網(wǎng)絡(luò)服務(wù)器上創(chuàng)立一個(gè)新的虛擬目錄,把它定義為一個(gè)應(yīng)用,給出開啟腳本權(quán)限的選項(xiàng),并在文件夾上指定適當(dāng)?shù)臋?quán)限。Jeff Sandquist將在這個(gè)過程中指導(dǎo)我們。

在這篇文章的結(jié)尾,我們有一個(gè)重要的、使人傷感的、足以使地球粉碎的公告。Clinton, O.J., Clemens與之相比一切都顯得蒼白無力。我確信AP會(huì)注意到它,但是你將首先看到它。請(qǐng)繼續(xù)閱讀。

展覽之中

上個(gè)月,我們的表格存在于一個(gè)叫Servin的虛擬目錄。我們可以使用IUSR_Machine Name>中的Internet Information Server(IIS)安全環(huán)境執(zhí)行所請(qǐng)求的操作。我們需要一個(gè)管理員身份來創(chuàng)建目錄和指定權(quán)限。

我們實(shí)現(xiàn)這個(gè)目的的一種方法是把IUSR_Machine Name>賬號(hào)遷移到管理員組。而更好的方法是,在Web服務(wù)器上創(chuàng)建一個(gè)新的虛擬目錄(我們將調(diào)用ServinSecure),并且把它設(shè)置成在管理員環(huán)境中操作,而不是在IUSR_Machine Name>環(huán)境中。我們的表單將保存在Servin目錄中

而表單的處理器將保存在一個(gè)叫ServinSecure的目錄中啟動(dòng)微軟管理控制臺(tái)(Microsoft Management Console,MMC)然后用右鍵擊Default Web Site創(chuàng)建一個(gè)新的虛擬目錄。選擇New/Virtual Directory。創(chuàng)建一個(gè)叫"ServinSecure"(沒有引號(hào))的虛擬目錄。你還需要提供一個(gè)以前在你的網(wǎng)絡(luò)服務(wù)器文件系統(tǒng)中創(chuàng)建的文件夾的物理路徑。一旦你創(chuàng)建了這個(gè)虛擬目錄,用右鍵擊中在MMC上新創(chuàng)建的虛擬目錄,選擇Properties顯示虛擬目錄的屬性。

選擇Directory Security標(biāo)簽,選擇Edit按鈕,接著選擇Enable anonymous…,編輯這個(gè)資源的身份確認(rèn)方法。這時(shí)候會(huì)出現(xiàn)一個(gè)標(biāo)題為Authentication Methods的對(duì)話框。選擇Edit按鈕,接著選擇Account used for Anonymous Access。出現(xiàn)一個(gè)題為Anonymous User Account的最終對(duì)話框。把用戶名的缺省值從IUSR_機(jī)器名>改成管理員,取消選定密碼同步,并為管理員帳戶提供密碼。在剩余的每個(gè)對(duì)話框上選擇OK使改變生效。

下面是對(duì)話框的圖形:

ASP代碼

讓我們一起看一下代碼。我們將為我們的應(yīng)用程序定義一些變量。創(chuàng)立一個(gè)叫CreateDirectory.asp的動(dòng)態(tài)服務(wù)器頁(Active Server Pages ,ASP)文件,在其中插入以下代碼:
%@ Language=VBScript %>
% Option Explicit %>
HTML>
HEAD>
META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
/HEAD>
BODY>

%
Dim strVirtualDirectoryName 'IIS虛擬目錄名
Dim bolInProcessApplication '處理應(yīng)用標(biāo)記中的IIS
Dim objIIS 'ADSI IIS對(duì)象
Dim strVirtualDirectoryPath 'IIS虛擬目錄路徑
Dim objFileSystem 'VBScript文件系統(tǒng)對(duì)象
Dim strOwner 'NT文件夾所有者
Dim objVirtualDirectory 'ADSI IIS虛擬目錄對(duì)象
Dim bolScriptPermissions 'IIS腳本權(quán)限標(biāo)記
Dim strHTTPReferer 'IIS參考頁
Dim strServerName 'NT本地機(jī)器名
Dim objWSH 'Windows腳本主機(jī)對(duì)象
Dim objRTC '返回
Dim strACLCommand '設(shè)置ACLs的命令行串

我們想確保用戶是從我們的表單來的,并且沒有欺騙我們的服務(wù)器。我們將檢索HTTPReferer服務(wù)器變量和服務(wù)器名來測(cè)試它。這兒你可以做許多檢查;在我們的測(cè)試中不必十分堅(jiān)固。關(guān)于安全站點(diǎn)的優(yōu)秀文章,請(qǐng)查看由Dmitry Khanine整理的Easy Application State Securely ( http://www.15seconds.com/Issue/990114.htm)。在代碼的結(jié)尾插入以下代碼:
strHTTPReferer = Request.ServerVariables("HTTP_REFERER") 
strServerName = Request.ServerVariables("SERVER_NAME")

' 我們是從我們的表格來的嗎?如果不是,則拒絕存取

If strHTTPReferer > "http://"  strServerName  "/Servin/Default.asp" then
Response.Write("Access Denied")
Response.End
End If

現(xiàn)在我們的網(wǎng)頁已證實(shí)我們的用戶是從我們的表單傳遞結(jié)果的,我們可以獲取虛擬目錄(Virtual Directory)、所有者(Owner)和腳本權(quán)限(Script Permissions)標(biāo)記的值。請(qǐng)注意我們是怎樣根據(jù)從checkboxScript獲取的值來改變的,如果它被選定,就設(shè)為True,如果沒有被選定就設(shè)為False。在你的最后一位代碼后插入以下代碼:
strVirtualDirectoryName = Request.Form("textVirtualDirectory")
strOwner = Request.Form("selectOwner")

If Request.Form("checkboxScript") = "on" Then 
bolScriptPermissions = "True"
Else
bolScriptPermissions = "False"
End If

我們需要確認(rèn)IIS應(yīng)用程序是否存在。使用IIS Admin對(duì)象,我們檢查是否應(yīng)用程序早已存在并且把相應(yīng)的警告?zhèn)鬟f給用戶。

' Does this IIS application already exist in the metabase?

On Error Resume Next
Set objIIS = GetObject("IIS://localhost/W3SVC/1/Root/"  strVirtualDirectoryName)

If Err.Number = 0 Then
Response.Write ("An application with this name already exists. Click ")
Response.Write ("A HREF=http:// "  strServerName  " /servin/default.asp>")
Response.Write ("here/A> to choose a different name.")
Response.End
End If

Set objIIS = Nothing
現(xiàn)在我們將使用IIS管理對(duì)象在meta數(shù)據(jù)庫中創(chuàng)建IIS應(yīng)用程序。

'創(chuàng)建IIS應(yīng)用程序
Set objIIS = GetObject("IIS://localhost/W3SVC/1/Root")
strVirtualDirectoryPath = objIIS.Path  "\"  strVirtualDirectoryName
使用VBScript的FileSystemObject對(duì)象,我們將測(cè)試文件夾是否存在于這個(gè)文件系統(tǒng);如果不存在,我們將使用CreateFolder命令創(chuàng)建它。
Set objFileSystem = Server.CreateObject("Scripting.FileSystemObject")

'Test to see if the folder exists in the filesystem. If not, create it

On Error Resume Next
Set Folder = objFileSystem.GetFolder(strVirtualDirectoryPath)
If Hex(Err.number) = "4C" Then
objFileSystem.CreateFolder strVirtualDirectoryPath
End If

Set objFileSystem = Nothing

使用Administration對(duì)象(在這篇文章中我們多次使用),我們開啟腳本權(quán)限(加入用戶選擇了這這選項(xiàng))并定義虛擬目錄作為一個(gè)進(jìn)程中的應(yīng)用。
'在文件系統(tǒng)上創(chuàng)建文件夾

Set objVirtualDirectory = objIIS.Create("IISWebVirtualDir",strVirtualDirectoryName)
objVirtualDirectory.AccessScript = bolScriptPermissions
objVirtualDirectory.Path = strVirtualDirectoryPath
objVirtualDirectory.SetInfo 
objVirtualDirectory.AppCreate bolInProcessApplication 

現(xiàn)在看一下這個(gè)魔術(shù):設(shè)置權(quán)限。我們確實(shí)認(rèn)為這是很簡(jiǎn)單的部分。不幸地是,在ADSI中不存在能為虛擬目錄設(shè)置權(quán)限的對(duì)象。驚慌失措,并且還有一點(diǎn)不舒服的感覺。(或者是由于昨天晚上大吃泰國飯菜引起的?)

搜索15seconds.com的ADSI列表服務(wù)器,發(fā)現(xiàn)一篇引用DOS CACLS.EXE文件的通訊( http://listserv.15seconds.com/scripts/wa15seconds.exe?A2=ind9806CL=ADSIP=R1861 )并且通過DOS CMD文件使用它。我們認(rèn)為我們可以為這個(gè)功能寫一個(gè)Visual Basic封裝并把它卷入一個(gè)定制組件(下個(gè)月的文章主題),但是一定有一個(gè)更快的方法。

我們?cè)贗an Morris整理的Windows Scripting Host FAQ ( http://wsh.glazier.co.nz/frame.htm )繼續(xù)我們的搜索,發(fā)現(xiàn)了從Windows Scripting Host?調(diào)用DOS命令的幾行代碼。

我們?cè)噲D使用Windows Scripting host從ASP文件調(diào)用CACLS.exe,我們的網(wǎng)頁不能執(zhí)行。應(yīng)用失敗了。為什么會(huì)這樣?我們從DOS命令提示單步調(diào)試這個(gè)命令發(fā)現(xiàn)CACLS.EXE命令在等待我們使用Y作為Yes來確認(rèn)操作。一定有一種方法使Yes作為缺省值。

檢查命令行選項(xiàng)沒有發(fā)現(xiàn)任何隱藏開關(guān)。就這一點(diǎn),打開瀏覽器,訪問在線支持發(fā)現(xiàn)CACLS.EXE好象應(yīng)該小心應(yīng)用。

我們興奮的發(fā)抖,發(fā)現(xiàn)了文章Q135268:How to Use CACLS.EXE in a Batch File ( http://support.microsoft.com/support/kb/articles/q135/2/68.asp )。啊哈,好的老DOS重定向。使用通道傳輸一個(gè)Y給CACLS.exe代表Yes。

下面是我們用來建立命令串和從ASP文件調(diào)用Windows Scripting Host shell的代碼。

'Set Change Permissions for the developer using CACLS.exe
strACLCommand = "cmd /c echo y| CACLS "
strACLCommand = strACLCommand  strVirtualDirectoryPath
strACLCommand = strACLCommand  " /g "  strOwner  ":C"

Set objWSH = Server.CreateObject("WScript.Shell")
objRTC = objWSH.Run (strACLCommand , 0, True)

Set objWSH = Nothing

這可能不是可伸縮性最好的解決方案。一個(gè)定制組件可以在大型的應(yīng)用程序上更好的幫助你。如果你需要一個(gè),Artisans軟件有一個(gè)免費(fèi)組件( http://www.softartisans.com/softartisans/safilemanager.html )允許你通過他的對(duì)象模型改變文件夾上的權(quán)限。(它也有一些其他很酷的特性,例如以點(diǎn)式輸入/輸出圖像,操作.ini文件和更多。)

我們最終的代碼證實(shí)我們所做的一切是值得的。

Response.Write("B>Web Application Created Sucessfully/B>BR>")
Response.Write("Path : " strVirtualDirectoryPath  "BR>")
Response.Write("Script Permissions : " bolScriptPermissions  "BR>")
Response.Write( strOwner  " has been granted change permissionsBR>")
%>
/BODY>
/HTML>

那就是它。當(dāng)尋找問題的解答時(shí)最重要的使記住使用多種資源。列表服務(wù)器,F(xiàn)AQs和微軟知識(shí)庫就包含了這一類的文章。

現(xiàn)在是新聞 由于我們?cè)诿恳黄贏SP專欄中收到的熱烈的反響,我們將把我們的欄目專門用于這種技術(shù)??梢灶A(yù)見的變化是,我們將介紹著名的Jeff Sandquist。那么有什么讓人傷感的呢?Tom Moran將離開Servin' It Up--但是如果你將來在其他地方看到他時(shí)不要感到太驚奇。

Jeff Sandquist(微軟最好的法裔加拿大人之一)是開發(fā)者支持的Active Server Pages擴(kuò)大組成員之一,也是Visual InterDev MVP程序( http://support.microsoft.com/support/supportnet/supportpartners/mvps/brochuregeneral.asp)的主要負(fù)責(zé)人。 
您可能感興趣的文章:
  • 讓你的博文自動(dòng)帶上縮址的實(shí)現(xiàn)代碼,方便發(fā)到微博客上
  • 用ajax自動(dòng)加載blogjava和博客園的rss
  • Linux下SVN服務(wù)器自動(dòng)更新文件到Web目錄的方法
  • rsync備份時(shí)自動(dòng)創(chuàng)建目錄的方法
  • 使用visual studio自動(dòng)創(chuàng)建IIS虛擬目錄
  • Windows下實(shí)現(xiàn)MySQL自動(dòng)備份的批處理(復(fù)制目錄或mysqldump備份)
  • php自動(dòng)獲取目錄下的模板的代碼
  • 使用FTP下載目錄,即FTP命令批量自動(dòng)下載的bat文件
  • 一個(gè)可以自動(dòng)創(chuàng)建多級(jí)目錄的函數(shù)
  • 詳解自動(dòng)生成博客目錄案例

標(biāo)簽:廣安 周口 六安 玉林 漳州 嘉興 臺(tái)灣 延安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用ADSI、ASP和一對(duì)魔術(shù)戲法自動(dòng)地創(chuàng)立一個(gè)虛擬目錄的方法》,本文關(guān)鍵詞  使用,ADSI,ASP,和,一對(duì),魔術(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用ADSI、ASP和一對(duì)魔術(shù)戲法自動(dòng)地創(chuàng)立一個(gè)虛擬目錄的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于使用ADSI、ASP和一對(duì)魔術(shù)戲法自動(dòng)地創(chuàng)立一個(gè)虛擬目錄的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章