234 lines
6.8 KiB
Plaintext
234 lines
6.8 KiB
Plaintext
'---------------------------------------------------------------------------------------------------
|
|
' This function creates a virtual web directory on the specified web site
|
|
' and with the specified path
|
|
'
|
|
'mkwebdir [--computer|-c COMPUTER1, COMPUTER2, COMPUTER3]
|
|
' <--website|-w WEBSITE>
|
|
' <--virtualdir|-v NAME1,PATH1,NAME2,PATH2,...>
|
|
' [--help|-?]
|
|
'
|
|
'COMPUTER Computer on which users exists
|
|
'WEBSITE1,WEBSITE2 Virtual Web Sites on which directories will be created
|
|
'NAME1,PATH1,NAME2,PATH2 Virtual Directories names and paths to create
|
|
'
|
|
'Example 1 mkwebdir -c LocalHost -w "Default Web Site"
|
|
' -v "Virtual Dir1","c:\inetpub\wwwroot\dir1","Virtual Dir2","c:\inetpub\wwwroot\dir2"
|
|
'Example 2 mkwebdir -c LocalHost -w 3
|
|
' -v "Virtual Dir1,c:\inetpub\wwwroot\dir1,Virtual Dir2,c:\inetpub\wwwroot\dir2"
|
|
'---------------------------------------------------------------------------------------------------
|
|
|
|
' Force explicit declaration of all variables.
|
|
Option Explicit
|
|
|
|
On Error Resume Next
|
|
|
|
Dim oArgs, ArgNum
|
|
|
|
Dim ArgComputer, ArgWebSites, ArgVirtualDirs, ArgDirNames(), ArgDirPaths(), DirIndex
|
|
Dim ArgComputers
|
|
|
|
Set oArgs = WScript.Arguments
|
|
ArgComputers = Array("LocalHost")
|
|
|
|
ArgNum = 0
|
|
While ArgNum < oArgs.Count
|
|
|
|
If (ArgNum + 1) >= oArgs.Count Then
|
|
Call DisplayUsage
|
|
End If
|
|
|
|
Select Case LCase(oArgs(ArgNum))
|
|
Case "--computer","-c":
|
|
ArgNum = ArgNum + 1
|
|
ArgComputers = Split(oArgs(ArgNum), ",", -1)
|
|
Case "--website","-w":
|
|
ArgNum = ArgNum + 1
|
|
ArgWebSites = oArgs(ArgNum)
|
|
Case "--virtualdir","-v":
|
|
ArgNum = ArgNum + 1
|
|
ArgVirtualDirs = Split(oArgs(ArgNum), ",", -1)
|
|
Case "--help","-?"
|
|
Call DisplayUsage
|
|
End Select
|
|
|
|
ArgNum = ArgNum + 1
|
|
Wend
|
|
|
|
ArgNum = 0
|
|
DirIndex = 0
|
|
|
|
ReDim ArgDirNames((UBound(ArgVirtualDirs)+1) \ 2)
|
|
ReDim ArgDirPaths((UBound(ArgVirtualDirs)+1) \ 2)
|
|
|
|
if isArray(ArgVirtualDirs) then
|
|
While ArgNum <= UBound(ArgVirtualDirs)
|
|
ArgDirNames(DirIndex) = ArgVirtualDirs(ArgNum)
|
|
If (ArgNum + 1) > UBound(ArgVirtualDirs) Then
|
|
WScript.Echo "Error understanding virtual directories"
|
|
Call DisplayUsage
|
|
End If
|
|
ArgNum = ArgNum + 1
|
|
ArgDirPaths(DirIndex) = ArgVirtualDirs(ArgNum)
|
|
ArgNum = ArgNum + 1
|
|
DirIndex = DirIndex + 1
|
|
Wend
|
|
end if
|
|
|
|
If (ArgWebSites = "") Or (IsArray(ArgDirNames) = False or IsArray(ArgDirPaths) = False) Then
|
|
Call DisplayUsage
|
|
Else
|
|
Dim compIndex
|
|
for compIndex = 0 to UBound(ArgComputers)
|
|
Call ASTCreateVirtualWebDir(ArgComputers(compIndex),ArgWebSites,ArgDirNames,ArgDirPaths)
|
|
next
|
|
End If
|
|
|
|
'---------------------------------------------------------------------------------
|
|
Sub Display(Msg)
|
|
WScript.Echo Now & ". Error Code: " & Hex(Err) & " - " & Msg
|
|
End Sub
|
|
|
|
Sub Trace(Msg)
|
|
WScript.Echo Now & " : " & Msg
|
|
End Sub
|
|
|
|
Sub DisplayUsage()
|
|
WScript.Echo "Usage: mkwebdir [--computer|-c COMPUTER1,COMPUTER2]"
|
|
WScript.Echo " <--website|-w WEBSITE1>"
|
|
WScript.Echo " <--virtualdir|-v NAME1,PATH1,NAME2,PATH2,...>"
|
|
WScript.Echo " [--help|-?]"
|
|
|
|
WScript.Echo ""
|
|
WScript.Echo "Note, WEBSITE is the Web Site on which the directory will be created."
|
|
WScript.Echo "The name can be specified as one of the following, in the priority specified:"
|
|
WScript.Echo " Server Number (i.e. 1, 2, 10, etc.)"
|
|
WScript.Echo " Server Description (i.e ""My Server"")"
|
|
WScript.Echo " Server Host name (i.e. ""www.domain.com"")"
|
|
WScript.Echo " IP Address (i.e., 127.0.0.1)"
|
|
WScript.Echo ""
|
|
WScript.Echo ""
|
|
WScript.Echo "Example : mkwebdir -c LocalHost -w ""Default Web Site"""
|
|
WScript.Echo " -v ""dir1"",""c:\inetpub\wwwroot\dir1"",""dir2"",""c:\inetpub\wwwroot\dir2"""
|
|
WScript.Echo
|
|
WScript.Echo " mkwebdir -c LocalHost -w 3"
|
|
WScript.Echo " -v ""dir1,c:\inetpub\wwwroot\dir1,dir2,c:\inetpub\wwwroot\dir2"""
|
|
|
|
WScript.Quit
|
|
End Sub
|
|
'---------------------------------------------------------------------------------
|
|
|
|
|
|
Sub ASTCreateVirtualWebDir(ComputerName,WebSiteName,DirNames,DirPaths)
|
|
Dim Computer, webSite, WebSiteID, vRoot, vDir, DirNum
|
|
On Error Resume Next
|
|
|
|
set webSite = findWeb(ComputerName, WebSiteName)
|
|
if IsObject(webSite) then
|
|
set vRoot = webSite.GetObject("IIsWebVirtualDir", "Root")
|
|
Trace "Accessing root for " & webSite.ADsPath
|
|
If (Err <> 0) Then
|
|
Display "Unable to access root for " & webSite.ADsPath
|
|
Else
|
|
DirNum = 0
|
|
If (IsArray(DirNames) = True) And (IsArray(DirPaths) = True) And (UBound(DirNames) = UBound(DirPaths)) Then
|
|
While DirNum < UBound(DirNames)
|
|
'Create the new virtual directory
|
|
Set vDir = vRoot.Create("IIsWebVirtualDir",DirNames(DirNum))
|
|
If (Err <> 0) Then
|
|
Display "Unable to create " & vRoot.ADsPath & "/" & DirNames(DirNum) &"."
|
|
Else
|
|
'Set the new virtual directory path
|
|
vDir.AccessRead = true
|
|
vDir.Path = DirPaths(DirNum)
|
|
If (Err <> 0) Then
|
|
Display "Unable to bind path " & DirPaths(DirNum) & " to " & vRootName & "/" & DirNames(DirNum) & ". Path may be invalid."
|
|
Else
|
|
'Save the changes
|
|
vDir.SetInfo
|
|
If (Err <> 0) Then
|
|
Display "Unable to save configuration for " & vRootName & "/" & DirNames(DirNum) &"."
|
|
Else
|
|
Trace "Web virtual directory " & vRootName & "/" & DirNames(DirNum) & " created successfully."
|
|
End If
|
|
End If
|
|
End If
|
|
Err = 0
|
|
DirNum = DirNum + 1
|
|
Wend
|
|
End If
|
|
End If
|
|
else
|
|
Display "Unable to find "& WebSiteName &" on "& ComputerName
|
|
End if
|
|
Trace "Done."
|
|
End Sub
|
|
|
|
function getBinding(bindstr)
|
|
|
|
Dim one, two, ia, ip, hn
|
|
|
|
one=Instr(bindstr,":")
|
|
two=Instr((one+1),bindstr,":")
|
|
|
|
ia=Mid(bindstr,1,(one-1))
|
|
ip=Mid(bindstr,(one+1),((two-one)-1))
|
|
hn=Mid(bindstr,(two+1))
|
|
|
|
getBinding=Array(ia,ip,hn)
|
|
end function
|
|
|
|
Function findWeb(computer, webname)
|
|
On Error Resume Next
|
|
|
|
Dim websvc, site
|
|
dim webinfo
|
|
Dim aBinding, binding
|
|
|
|
set websvc = GetObject("IIS://"&computer&"/W3svc")
|
|
if (Err <> 0) then
|
|
exit function
|
|
end if
|
|
' First try to open the webname.
|
|
set site = websvc.GetObject("IIsWebServer", webname)
|
|
if (Err = 0) and (not isNull(site)) then
|
|
if (site.class = "IIsWebServer") then
|
|
' Here we found a site that is a web server.
|
|
set findWeb = site
|
|
exit function
|
|
end if
|
|
end if
|
|
err.clear
|
|
for each site in websvc
|
|
if site.class = "IIsWebServer" then
|
|
'
|
|
' First, check to see if the ServerComment
|
|
' matches
|
|
'
|
|
If site.ServerComment = webname Then
|
|
set findWeb = site
|
|
exit function
|
|
End If
|
|
aBinding=site.ServerBindings
|
|
if (IsArray(aBinding)) then
|
|
if aBinding(0) = "" then
|
|
binding = Null
|
|
else
|
|
binding = getBinding(aBinding(0))
|
|
end if
|
|
else
|
|
if aBinding = "" then
|
|
binding = Null
|
|
else
|
|
binding = getBinding(aBinding)
|
|
end if
|
|
end if
|
|
if IsArray(binding) then
|
|
if (binding(2) = webname) or (binding(0) = webname) then
|
|
set findWeb = site
|
|
exit function
|
|
End If
|
|
end if
|
|
end if
|
|
next
|
|
End Function
|