改进后的mkw3site.vbs怎么样?
////////////////////////// 作者:Jaron, 江都资讯网 邮件:jaron@jdinfo.net 网址:http://www.jiangdu.net 本文首次发表于 jiangdu.net ,如果您要转载该文章,请注明出处。 //////////////////////////
'--------------------------------------------------------------------------------------------------- ' 创建虚拟目录 POWER BY JARON , 江都资讯网 , 1999-2002. ' 如果您需要设置权限,请修改40-56 的代码。 ** 根据 Microsoft Corp. 的 AdminScripts 改写 ' ' 用法: mkw3site <--RootDirectory|-r ROOT DIRECTORY> ' <--Comment|-t SERVER COMMENT> ' [--computer|-c COMPUTER1[,COMPUTER2...]] ' [--HostName|-h HOST NAME] ' [--port|-o PORT NUM] ' [--IPAddress|-i IP ADDRESS] ' [--SiteNumber|-n SITENUMBER] ' [--DontStart] ' [--verbose|-v] ' [--help|-?] ' ' IP ADDRESS The IP Address to assign to the new server. Optional. ' HOST NAME The host name of the web site for host headers. 'WARNING: Only use Host Name if DNS is set up find the server. ' PORT NUM The port to which the server should bind ' ROOT DIRECTORY Full path to the root directory for the new server. ' SERVER COMMENT The server comment -- this is the name that appers in the MMC. ' SITENUMBERThe Site Number is the number in the path that the web server 'will be created at. i.e. w3svc/3 ' ' Example 1: mkw3site -r D:/Roots/Company11 --DontStart -t "My Company Site" ' Example 2: mkw3site -r C:/Inetpub/wwwroot -t Test -o 8080 '------------------------------------------------------------------------------------------------
' Force explicit declaration of all variables Option Explicit
On Error Resume Next
Dim ArgIPAddress, ArgRootDirectory, ArgServerComment, ArgSkeletalDir, ArgHostName, ArgPort
Dim ArgComputers, ArgStart Dim ArgSiteNumber Dim oArgs, ArgNum Dim verbose ' 设置可写、脚本执行权限 Dim prop(15,2) Dim propNum prop(propNum,0) = "AccessRead" prop(propNum,1) = true' 可读设为TRUE,不可读设为FALSE propNum = propNum + 1 prop(propNum, 0) = "AccessWrite" prop(propNum, 1) = true ' 可写设为TRUE,不可写设为FALSE propNum = propNum + 1 prop(propNum, 0) = "AccessScript" prop(propNum, 1) = true ' 可运行脚本文件设为TRUE,不可运行脚本文件设为FALSE propNum = propNum + 1 prop(propNum, 0) = "AccessExecute" prop(propNum, 1) = false ' 可运行执行文件设为TRUE,不可运行执行文件设为FALSE propNum = propNum + 1 prop(propNum, 0) = "EnableDirBrowsing" prop(propNum, 1) = true ' 允许列出目录设为TRUE,不允许列出目录设为FALSE propNum = propNum + 1ArgIPAddress = ""
ArgHostName = "" ArgPort = 80 ArgStart = True ArgComputers = Array(1) ArgComputers(0) = "LocalHost" ArgSiteNumber = 0 verbose = falseSet oArgs = WScript.Arguments
ArgNum = 0While ArgNum < oArgs.Count
Select Case LCase(oArgs(ArgNum))
Case "--port","-o": ArgNum = ArgNum + 1 ArgPort = oArgs(ArgNum) Case "--ipaddress","-i": ArgNum = ArgNum + 1 ArgIPAddress = oArgs(ArgNum) Case "--rootdirectory","-r": ArgNum = ArgNum + 1 ArgRootDirectory = oArgs(ArgNum) Case "--comment","-t": ArgNum = ArgNum + 1 ArgServerComment = oArgs(ArgNum) Case "--hostname","-h": ArgNum = ArgNum + 1 ArgHostName = oArgs(ArgNum) Case "--computer","-c": ArgNum = ArgNum + 1 ArgComputers = Split(oArgs(ArgNum), ",", -1) Case "--sitenumber","-n": ArgNum = ArgNum + 1 ArgSiteNumber = CLng(oArgs(ArgNum)) Case "--dontstart": ArgStart = False Case "--help","-?": Call DisplayUsage Case "--verbose", "-v": verbose = true Case Else: WScript.Echo "Unknown argument "& oArgs(ArgNum) Call DisplayUsage End SelectArgNum = ArgNum + 1
WendIf (ArgRootDirectory = "") Or (ArgServerComment = "") Then
if (ArgRootDirectory = "") then WScript.Echo "Missing Root Directory" else WScript.Echo "Missing Server Comment" end if Call DisplayUsage WScript.Quit(1) End IfCall ASTCreateWebSite(ArgIPAddress, ArgRootDirectory, ArgServerComment, ArgHostName, ArgPort, ArgComputers, ArgStart)
Sub ASTCreateWebSite(IPAddress, RootDirectory, ServerComment, HostName, PortNum, Computers, Start)
Dim w3svc, WebServer, NewWebServer, NewDir, Bindings, BindingString, NewBindings, ComputerIndex, Index, SiteObj, bDone Dim comp On Error Resume Next For ComputerIndex = 0 To UBound(Computers) comp = Computers(ComputerIndex) If ComputerIndex <> UBound(Computers) Then Trace "Creating web site on " & comp & "." End If' Grab the web service object
Err.Clear Set w3svc = GetObject("IIS://" & comp & "/w3svc") If Err.Number <> 0 Then Display "Unable to open: "&"IIS://" & comp & "/w3svc" End If BindingString = IpAddress & ":" & PortNum & ":" & HostName Trace "Making sure this web server doesn't conflict with another..." For Each WebServer in w3svc If WebServer.Class = "IIsWebServer" Then Bindings = WebServer.ServerBindings If BindingString = Bindings(0) Then Trace "The server bindings you specified are duplicated in another virtual web server." WScript.Quit (1) End If End If NextIndex = 1
bDone = False Trace "Creating new web server..."' If the user specified a SiteNumber, then use that. Otherwise,
' test successive numbers under w3svc until an unoccupied slot is found If ArgSiteNumber <> 0 Then Set NewWebServer = w3svc.Create("IIsWebServer", ArgSiteNumber) NewWebServer.SetInfo If (Err.Number <> 0) Then WScript.Echo "Couldn't create a web site with the specified number: " & ArgSiteNumber WScript.Quit (1) Else Err.Clear ' Verify that the newly created site can be retrieved Set SiteObj = GetObject("IIS://"&comp&"/w3svc/" & ArgSiteNumber) If (Err.Number = 0) Then bDone = True Trace "Web server created. Path is - "&"IIS://"&comp&"/w3svc/" & ArgSiteNumber Else WScript.Echo "Couldn't create a web site with the specified number: " & ArgSiteNumber WScript.Quit (1) End If End If Else While (Not bDone) Err.Clear Set SiteObj = GetObject("IIS://"&comp&"/w3svc/" & Index)If (Err.Number = 0) Then
' A web server is already defined at this position so increment Index = Index + 1 Else Err.Clear Set NewWebServer = w3svc.Create("IIsWebServer", Index) NewWebServer.SetInfo If (Err.Number <> 0) Then ' If call to Create failed then try the next number Index = Index + 1 Else Err.Clear ' Verify that the newly created site can be retrieved Set SiteObj = GetObject("IIS://"&comp&"/w3svc/" & Index) If (Err.Number = 0) Then bDone = True Trace "Web server created. Path is - "&"IIS://"&comp&"/w3svc/" & Index Else Index = Index + 1 End If End If End If' sanity check
If (Index > 10000) Then Trace "Seem to be unable to create new web server. Server number is "&Index&"." WScript.Quit (1) End If Wend End If NewBindings = Array(0) NewBindings(0) = BindingString NewWebServer.ServerBindings = NewBindings NewWebServer.ServerComment = ServerComment NewWebServer.SetInfo' Now create the root directory object.
Trace "Setting the home directory..." Set NewDir = NewWebServer.Create("IIsWebVirtualDir", "ROOT") NewDir.Path = RootDirectory NewDir.AccessRead = true Err.Clear NewDir.SetInfo NewDir.AppCreate (True)If (Err.Number = 0) Then
Trace "Home directory set." Else Display "Error setting home directory." End IfTrace "Web site created!"
If Start = True Then
Trace "Attempting to start new web server..." Err.Clear Set NewWebServer = GetObject("IIS://" & comp & "/w3svc/" & Index) NewWebServer.Start If Err.Number <> 0 Then Display "Error starting web server!" Err.Clear Else Trace "Web server started succesfully!" End If End If Next Call ASTSetPerms(comp, Index,ArgRootDirectory , prop, propNum) End SubSub ASTSetPerms(comp, ArgSiteNumber,ArgRootDirectory , propList, propCount)
'On Error Resume Next Dim oAdmin Dim fullPath fullPath = "IIS://"&comp&"/w3svc/" & ArgSiteNumber & "/ROOT" Trace "Opening path " & fullPath Set oAdmin = GetObject(fullPath) If Err.Number <> 0 Then Display Error_NoNode WScript.Quit (1) End IfDim name, val
if propCount > 0 then Dim ifor i = 0 to propCount-1
name = propList(i,0) val = propList(i,1) if verbose = true then Trace "Setting "&fullPath&"/"&name&" = "& val end if oAdmin.Put name, (val) If Err <> 0 Then Display "Unable to set property "&name End If next oAdmin.SetInfo If Err <> 0 Then Display "不能保存更新信息." End If end if End Sub' Display the usage message
Sub DisplayUsage WScript.Quit (1) End SubSub Display(Msg)
WScript.Echo Now & ". Error Code: " & Hex(Err) & " - " & Msg End SubSub Trace(Msg)
if verbose = true then WScript.Echo Now & " : " & Msg end if End Sub