改进后的mkw3site.vbs(创建虚拟目录)

    技术2022-05-11  19

    //作者: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 variablesOption Explicit

    On Error Resume Next

    Dim ArgIPAddress, ArgRootDirectory, ArgServerComment, ArgSkeletalDir, ArgHostName, ArgPortDim ArgComputers, ArgStartDim ArgSiteNumberDim oArgs, ArgNumDim verbose' 设置可写、脚本执行权限Dim prop(15,2)Dim propNumprop(propNum,0) = "AccessRead"prop(propNum,1) = true' 可读设为TRUE,不可读设为FALSEpropNum = propNum + 1prop(propNum, 0) = "AccessWrite"prop(propNum, 1) = true ' 可写设为TRUE,不可写设为FALSEpropNum = propNum + 1prop(propNum, 0) = "AccessScript"prop(propNum, 1) = true ' 可运行脚本文件设为TRUE,不可运行脚本文件设为FALSEpropNum = propNum + 1prop(propNum, 0) = "AccessExecute"prop(propNum, 1) = false ' 可运行执行文件设为TRUE,不可运行执行文件设为FALSEpropNum = propNum + 1prop(propNum, 0) = "EnableDirBrowsing"prop(propNum, 1) = true ' 允许列出目录设为TRUE,不允许列出目录设为FALSEpropNum = propNum + 1

    ArgIPAddress = ""ArgHostName = ""ArgPort = 80ArgStart = TrueArgComputers = Array(1)ArgComputers(0) = "LocalHost"ArgSiteNumber = 0verbose = false

    Set oArgs = WScript.ArgumentsArgNum = 0

    While ArgNum < oArgs.Count

    Select Case LCase(oArgs(ArgNum))Case "--port","-o":ArgNum = ArgNum + 1ArgPort = oArgs(ArgNum)Case "--ipaddress","-i":ArgNum = ArgNum + 1ArgIPAddress = oArgs(ArgNum)Case "--rootdirectory","-r": ArgNum = ArgNum + 1ArgRootDirectory = oArgs(ArgNum)Case "--comment","-t":ArgNum = ArgNum + 1ArgServerComment = oArgs(ArgNum)Case "--hostname","-h":ArgNum = ArgNum + 1ArgHostName = oArgs(ArgNum)Case "--computer","-c":ArgNum = ArgNum + 1ArgComputers = Split(oArgs(ArgNum), ",", -1)Case "--sitenumber","-n":ArgNum = ArgNum + 1ArgSiteNumber = CLng(oArgs(ArgNum))Case "--dontstart":ArgStart = FalseCase "--help","-?":Call DisplayUsageCase "--verbose", "-v":verbose = trueCase Else:WScript.Echo "Unknown argument "& oArgs(ArgNum)Call DisplayUsageEnd Select

    ArgNum = ArgNum + 1Wend

    If (ArgRootDirectory = "") Or (ArgServerComment = "") Thenif (ArgRootDirectory = "") thenWScript.Echo "Missing Root Directory"elseWScript.Echo "Missing Server Comment"end ifCall DisplayUsageWScript.Quit(1)End If

    Call 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, bDoneDim compOn Error Resume NextFor ComputerIndex = 0 To UBound(Computers)comp = Computers(ComputerIndex)If ComputerIndex <> UBound(Computers) ThenTrace "Creating web site on " & comp & "."End If

    ' Grab the web service objectErr.ClearSet w3svc = GetObject("IIS://" & comp & "/w3svc")If Err.Number <> 0 ThenDisplay "Unable to open: "&"IIS://" & comp & "/w3svc"End IfBindingString = IpAddress & ":" & PortNum & ":" & HostNameTrace "Making sure this web server doesn't conflict with another..."For Each WebServer in w3svcIf WebServer.Class = "IIsWebServer" ThenBindings = WebServer.ServerBindingsIf BindingString = Bindings(0) ThenTrace "The server bindings you specified are duplicated in another virtual web server."WScript.Quit (1)End IfEnd IfNext

    Index = 1bDone = FalseTrace "Creating new web server..."

    ' If the user specified a SiteNumber, then use that.  Otherwise,' test successive numbers under w3svc until an unoccupied slot is foundIf ArgSiteNumber <> 0 ThenSet NewWebServer = w3svc.Create("IIsWebServer", ArgSiteNumber)NewWebServer.SetInfoIf (Err.Number <> 0) ThenWScript.Echo "Couldn't create a web site with the specified number: " & ArgSiteNumberWScript.Quit (1)ElseErr.Clear' Verify that the newly created site can be retrievedSet SiteObj = GetObject("IIS://"&comp&"/w3svc/" & ArgSiteNumber)If (Err.Number = 0) ThenbDone = TrueTrace "Web server created. Path is - "&"IIS://"&comp&"/w3svc/" & ArgSiteNumberElseWScript.Echo "Couldn't create a web site with the specified number: " & ArgSiteNumberWScript.Quit (1)End IfEnd IfElseWhile (Not bDone)Err.ClearSet SiteObj = GetObject("IIS://"&comp&"/w3svc/" & Index)

    If (Err.Number = 0) Then' A web server is already defined at this position so incrementIndex = Index + 1ElseErr.ClearSet NewWebServer = w3svc.Create("IIsWebServer", Index)NewWebServer.SetInfoIf (Err.Number <> 0) Then' If call to Create failed then try the next numberIndex = Index + 1ElseErr.Clear' Verify that the newly created site can be retrievedSet SiteObj = GetObject("IIS://"&comp&"/w3svc/" & Index)If (Err.Number = 0) ThenbDone = TrueTrace "Web server created. Path is - "&"IIS://"&comp&"/w3svc/" & IndexElseIndex = Index + 1End IfEnd IfEnd If

    ' sanity checkIf (Index > 10000) ThenTrace "Seem to be unable to create new web server.  Server number is "&Index&"."WScript.Quit (1)End IfWendEnd IfNewBindings = Array(0)NewBindings(0) = BindingStringNewWebServer.ServerBindings = NewBindingsNewWebServer.ServerComment = ServerCommentNewWebServer.SetInfo

    ' Now create the root directory object.Trace "Setting the home directory..."Set NewDir = NewWebServer.Create("IIsWebVirtualDir", "ROOT")NewDir.Path = RootDirectoryNewDir.AccessRead = trueErr.ClearNewDir.SetInfoNewDir.AppCreate (True)

    If (Err.Number = 0) ThenTrace "Home directory set."ElseDisplay "Error setting home directory."End If

    Trace "Web site created!"

    If Start = True ThenTrace "Attempting to start new web server..."Err.ClearSet NewWebServer = GetObject("IIS://" & comp & "/w3svc/" & Index)NewWebServer.StartIf Err.Number <> 0 ThenDisplay "Error starting web server!"Err.ClearElseTrace "Web server started succesfully!"End IfEnd IfNextCall ASTSetPerms(comp, Index,ArgRootDirectory , prop, propNum)End Sub

    Sub ASTSetPerms(comp, ArgSiteNumber,ArgRootDirectory , propList, propCount)'On Error Resume NextDim oAdminDim fullPathfullPath = "IIS://"&comp&"/w3svc/" & ArgSiteNumber & "/ROOT"Trace "Opening path " & fullPathSet oAdmin = GetObject(fullPath)If Err.Number <> 0 ThenDisplay Error_NoNodeWScript.Quit (1)End If

    Dim name, valif propCount > 0 thenDim i

    for i = 0 to propCount-1name = propList(i,0)val = propList(i,1)if verbose = true thenTrace "Setting "&fullPath&"/"&name&" = "& valend ifoAdmin.Put name, (val)If Err <> 0 ThenDisplay "Unable to set property "&nameEnd IfnextoAdmin.SetInfoIf Err <> 0 ThenDisplay "不能保存更新信息."End Ifend ifEnd Sub

    ' Display the usage messageSub DisplayUsageWScript.Quit (1)End Sub

    Sub Display(Msg)WScript.Echo Now & ". Error Code: " & Hex(Err) & " - " & MsgEnd Sub

    Sub Trace(Msg)if verbose = true thenWScript.Echo Now & " : " & Msgend ifEnd Sub


    最新回复(0)