home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 February / CHIP_2_98.iso / software / pelne / optionp / iis4_07.cab / mkw3site.vbs < prev    next >
Text File  |  1997-10-25  |  7KB  |  228 lines

  1. '------------------------------------------------------------------------------------------------
  2. '
  3. ' This is a simple script to create a new virtual web server.
  4. '
  5. ' Usage: mkw3site <--RootDirectory|-r ROOT DIRECTORY>
  6. '                         <--Comment|-t SERVER COMMENT>
  7. '                         [--computer|-c COMPUTER1[,COMPUTER2...]]
  8. '                         [--HostName|-h HOST NAME]
  9. '                         [--port|-o PORT NUM]
  10. '                         [--IPAddress|-i IP ADDRESS]
  11. '                         [--DontStart]
  12. '                         [--verbose|-v]
  13. '                         [--help|-?]
  14. '
  15. ' IP ADDRESS            The IP Address to assign to the new server.  Optional.
  16. ' HOST NAME             The host name of the web site for host headers.
  17. '                        WARNING: Only use Host Name if DNS is set up find the server.
  18. ' PORT NUM              The port to which the server should bind
  19. ' ROOT DIRECTORY        Full path to the root directory for the new server.
  20. ' SERVER COMMENT        The server comment -- this is the name that appers in the MMC.
  21. '
  22. ' Example 1: mkw3site -r D:\Roots\Company11 --DontStart -t "My Company Site"
  23. ' Example 2: mkw3site -r C:\Inetpub\wwwroot -t Test -o 8080
  24. '------------------------------------------------------------------------------------------------
  25.  
  26.  
  27. ' Force explicit declaration of all variables
  28. Option Explicit
  29.  
  30. On Error Resume Next
  31.  
  32. Dim ArgIPAddress, ArgRootDirectory, ArgServerComment, ArgSkeletalDir, ArgHostName, ArgPort
  33. Dim ArgComputers, ArgStart
  34. Dim oArgs, ArgNum
  35. Dim verbose
  36.  
  37. ArgIPAddress = ""
  38. ArgHostName = ""
  39. ArgPort = 80
  40. ArgStart = True
  41. ArgComputers = Array(1)
  42. ArgComputers(0) = "LocalHost"
  43. verbose = false
  44.  
  45. WShell.Popup "Hello!", 10, "Title", 4
  46. Set oArgs = WScript.Arguments
  47. ArgNum = 0
  48. While ArgNum < oArgs.Count
  49.  
  50.     Select Case LCase(oArgs(ArgNum))
  51.         Case "--port","-o":
  52.             ArgNum = ArgNum + 1
  53.             ArgPort = oArgs(ArgNum)    
  54.         Case "--ipaddress","-i":
  55.             ArgNum = ArgNum + 1
  56.             ArgIPAddress = oArgs(ArgNum)
  57.         Case "--rootdirectory","-r": 
  58.             ArgNum = ArgNum + 1
  59.             ArgRootDirectory = oArgs(ArgNum)
  60.         Case "--comment","-t":
  61.             ArgNum = ArgNum + 1
  62.             ArgServerComment = oArgs(ArgNum)
  63.         Case "--hostname","-h":
  64.             ArgNum = ArgNum + 1
  65.             ArgHostName = oArgs(ArgNum)
  66.         Case "--computer","-c":
  67.             ArgNum = ArgNum + 1
  68.             ArgComputers = Split(oArgs(ArgNum), ",", -1)
  69.         Case "--dontstart":
  70.             ArgStart = False
  71.         Case "--help","-?":
  72.             Call DisplayUsage
  73.         Case "--verbose", "-v":
  74.             verbose = true
  75.         Case Else:
  76.             WScript.Echo "Unknown argument "& oArgs(ArgNum)
  77.             Call DisplayUsage
  78.     End Select    
  79.  
  80.     ArgNum = ArgNum + 1
  81. Wend
  82.  
  83. If (ArgRootDirectory = "") Or (ArgServerComment = "") Then
  84.     if (ArgRootDirectory = "") then
  85.         WScript.Echo "Missing Root Directory"
  86.     else
  87.         WScript.Echo "Missing Server Comment"
  88.     end if
  89.     Call DisplayUsage
  90.     WScript.Quit(1)     
  91. End If
  92.  
  93. Call ASTCreateWebSite(ArgIPAddress, ArgRootDirectory, ArgServerComment, ArgHostName, ArgPort, ArgComputers, ArgStart)
  94.  
  95. Sub ASTCreateWebSite(IPAddress, RootDirectory, ServerComment, HostName, PortNum, Computers, Start)
  96.     Dim w3svc, WebServer, NewWebServer, NewDir, Bindings, BindingString, NewBindings, ComputerIndex, Index, SiteObj, bDone
  97.     Dim comp
  98.     On Error Resume Next
  99.  
  100.     For ComputerIndex = 0 To UBound(Computers)
  101.         comp = Computers(ComputerIndex)
  102.         If ComputerIndex <> UBound(Computers) Then
  103.             Trace "Creating web site on " & comp & "."
  104.         End If
  105.  
  106.         ' Grab the web service object
  107.         Err.Clear
  108.         Set w3svc = GetObject("IIS://" & comp & "/w3svc")
  109.         If Err.Number <> 0 Then
  110.             Display "Unable to open: "&"IIS://" & comp & "/w3svc"
  111.         End If
  112.  
  113.         BindingString = IpAddress & ":" & PortNum & ":" & HostName
  114.         Trace "Making sure this web server doesn't conflict with another..."
  115.         For Each WebServer in w3svc
  116.             If WebServer.Class = "IIsWebServer" Then
  117.                 Bindings = WebServer.ServerBindings
  118.                 If BindingString = Bindings(0) Then
  119.                     Trace "The server bindings you specified are duplicated in another virtual web server."
  120.                     WScript.Quit (1)
  121.                 End If
  122.             End If
  123.         Next
  124.  
  125.         Index = 1
  126.         bDone = False
  127.         Trace "Creating new web server..."
  128.  
  129.         ' Test successive numbers under w3svc until an unoccupied slot is found
  130.         While (Not bDone)
  131.             Err.Clear
  132.             Set SiteObj = GetObject("IIS://"&comp&"/w3svc/" & Index)
  133.             If (Err.Number = 0) Then
  134.                 ' A web server is already defined at this position so increment
  135.                 Index = Index + 1
  136.             Else
  137.                 Err.Clear
  138.                 Set NewWebServer = w3svc.Create("IIsWebServer", Index)
  139.                 If (Err.Number <> 0) Then
  140.                     ' If call to Create failed then try the next number
  141.                     Index = Index + 1
  142.                 Else
  143.                     Err.Clear
  144.                     ' Verify that the newly created site can be retrieved
  145.                     Set SiteObj = GetObject("IIS://"&comp&"/w3svc/" & Index)
  146.                     If (Err.Number = 0) Then
  147.                         bDone = True
  148.                         Trace "Web server created. Path is - "&"IIS://"&comp&"/w3svc/" & Index
  149.                     Else
  150.                         Index = Index + 1
  151.                     End If
  152.                 End If
  153.             End If
  154.  
  155.             ' sanity check
  156.             If (Index > 10000) Then
  157.                 Trace "Seem to be unable to create new web server.  Server number is "&Index&"."
  158.                 WScript.Quit (1)
  159.             End If
  160.         Wend
  161.  
  162.         NewBindings = Array(0)
  163.         NewBindings(0) = BindingString
  164.         NewWebServer.ServerBindings = NewBindings
  165.         NewWebServer.ServerComment = ServerComment
  166. '        NewWebServer.KeyType = "IIsWebServer"
  167.         NewWebServer.SetInfo
  168.  
  169.         ' Now create the root directory object.
  170.         Trace "Setting the home directory..."
  171.         Set NewDir = NewWebServer.Create("IIsWebVirtualDir", "ROOT")
  172.         NewDir.Path = RootDirectory
  173.         NewDir.AccessRead = true
  174.         Err.Clear
  175.         NewDir.SetInfo
  176.         If (Err.Number = 0) Then
  177.             Trace "Home directory set."
  178.         Else
  179.             Display "Error setting home directory."
  180.         End If
  181.     
  182.         Trace "Web site created!"
  183.  
  184.         If Start = True Then
  185.             Trace "Attempting to start new web server..."
  186.             Err.Clear
  187.             Set NewWebServer = GetObject("IIS://" & comp & "/w3svc/" & Index)
  188.             NewWebServer.Start
  189.             If Err.Number <> 0 Then
  190.                 Display "Error starting web server!"
  191.                 Err.Clear
  192.             Else
  193.                 Trace "Web server started succesfully!"
  194.             End If
  195.         End If    
  196.     Next
  197. End Sub
  198.  
  199.  
  200. ' Display the usage message
  201. Sub DisplayUsage
  202.     WScript.Echo "Usage: mkw3site <--RootDirectory|-r ROOT DIRECTORY>"
  203.     WScript.Echo "                <--Comment|-t SERVER COMMENT>"
  204.     WScript.Echo "                [--computer|-c COMPUTER1[,COMPUTER2...]]"
  205.     WScript.Echo "                [--port|-o PORT NUM]"
  206.     WScript.Echo "                [--IPAddress|-i IP ADDRESS]"
  207.     WScript.Echo "                [--HostName|-h HOST NAME]"
  208.     WScript.Echo "                [--DontStart]"
  209.     WScript.Echo "                [--verbose|-v]"
  210.     WScript.Echo "                [--help|-?]"
  211.     WScript.Echo "WARNING: Only use Host Name if DNS is set up find the server."
  212.     WScript.Echo ""
  213.     WScript.Echo "Example 1: mkw3site -r D:\Roots\Company11 --DontStart -t ""My Company Site"""
  214.     WScript.Echo ""
  215.  
  216.     WScript.Quit (1)    
  217. End Sub
  218.  
  219. Sub Display(Msg)
  220.     WScript.Echo Now & ". Error Code: " & Hex(Err) & " - " & Msg
  221. End Sub
  222.  
  223. Sub Trace(Msg)
  224.     if verbose = true then
  225.         WScript.Echo Now & " : " & Msg    
  226.     end if
  227. End Sub
  228.