Jump to content

Automation of Virtual Directories


Recommended Posts

Hello I am trying to automate the process of making a virtual directory under another virtual directory. Currently my code only makes the first virtual directory. I want to be able to go inside that folder and select another folder and make that one a virtual directory also. Is there a way for me to read the folder names and select them and then find a folder when im inside the directory. My current code is as follows.

; The #include function brings in other AutoIt v3 projects.  
#include <GUIConstants.au3>
; Lines 16 - 23 are setting up the GUI.
$Form1 = GUICreate("XLCapital Virtual Directory Creator", 370, 173, 192, 125)
$InputAlias = GUICtrlCreateInput("",32, 27, 169, 21)
$InputFolder = GUICtrlCreateInput("", 32, 80, 250, 21)
$BtnBrowse = GUICtrlCreateButton("Browse", 300, 80, 57, 25, 0)
$BtnNext = GUICtrlCreateButton("Next", 50,110)
$BtnClear = GUICtrlCreateButton("Clear", 100,110)
$BtnExit = GUICtrlCreateButton("Exit", 150, 110)
GUICtrlCreateLabel ("Please click browse to find the Directory you want", 32, 59 )
GUICtrlCreateLabel ("Please enter an Alias name", 32, 6)

; GUISetState makes the form show on the screen
GUISetState(@SW_SHOW)
; the GUICtrlSetState function disables the $InputFolder so the user can not manually enter data in the input box.  
GUICtrlSetState ($InputFolder, $GUI_DISABLE)

While 1
; $msg is used to react with what actions are happening on the GUI.  
    $msg = GuiGetMsg()
    Select
; Line 36 is the "X" button coding.  
    Case $msg = $GUI_EVENT_CLOSE
        ExitLoop
; Lines 40 - 42 are code for the browse button.  
; You are able to open up the select folder window and send the selected folder to the input box.
    Case $msg = $BtnBrowse
        $select = FileSelectFolder( "Select File","c:\")
        ControlSetText( "", "", $InputFolder, $select)
; Lines 44 - 47 are code for the clear button.  We are clearing the text and then setting the focus for the Alias input.
    Case $msg = $BtnClear
        ControlSetText("","",$InputAlias,"")
        ControlSetText("","",$InputFolder,"")
        Controlfocus ("","",$InputAlias)
; Line 49 and 50 are the code for the Exit button.
    Case $msg = $BtnExit
        Exit
; The following lines are tied into the Next button.
    Case $msg = $BtnNext
; Lines 55 - 58 read the input boxes and then checks to see if there is a null value in them.
; Then lines 59 - 64 gives errors if there is a null value in the input box.
        $ReadAlias = GUICtrlRead($InputAlias)
        $NullCheckAlias = StringReplace($ReadAlias, "|", @CRLF)
        $ReadFolder = GUICtrlRead($InputFolder)
        $NullCheckFolder = Stringreplace($ReadFolder, "|",@CRLF)
        If $NullCheckAlias = "" Then 
            msgbox(16,"Error","Please Enter in an Alias")
            Controlfocus ("","",$InputAlias)
        ElseIf $NullCheckFolder = "" Then
            msgbox(16,"Error","Please Select a Directory")
            Controlfocus ("","",$InputFolder)
    ; Lines 67 - 95 are part of the step through of the IIS.  I have blocked the input from the keyboard and mouse during this
    ;   time because the input of either one could crash the script.  
        Else
            BlockInput (1)
            Send("#r") 
            WinWaitActive("Run")
            Send("inetmgr")
            Send("{ENTER}")
            WinWaitActive("Internet Information Services")
            Send("{Right}")
            Send("{Right}")
            Send("{Right}")
            Send("{Right}")
            Send("{Right}")
            Send("!a")
            Send("n")
            Send("v")
            Winwaitactive("Virtual Directory Creation Wizard","Welcome to the Virtual Directory Creation Wizard")
            Send("!n")
            WinWaitActive("Virtual Directory Creation Wizard","Virtual Directory Alias")
            $alias = GUICtrlRead($InputAlias)
            Send($alias)
            Send("!n")
            WinWaitActive("Virtual Directory Creation Wizard","Web Site Content Directory")
            Send($select)
            Send("!n")
            WinWaitActive("Virtual Directory Creation Wizard","Access Permissions")
            Send("!n")
            WinWaitActive("Virtual Directory Creation Wizard","You have successfully completed the Virtual Directory Creation Wizard.")
            Send("{ENTER}")
            BlockInput (0)
        EndIf
EndSelect

WEnd
Edited by Sean M
Link to comment
Share on other sites

  • 1 year later...

Hi

You can use this code to create a website. (It is not my code!)

CODE
'---------------------------------------------------------------------------------------------------

' 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

Janus S. Andersen

P.s. The best way is to translate it to Autoit3

Link to comment
Share on other sites

  • 6 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...