Microsoft KB Archive/247364: Difference between revisions
m (Text replacement - "<" to "<") |
m (Text replacement - ">" to ">") |
||
Line 156: | Line 156: | ||
For iComputerIndex = 0 To UBound(szComputers) | For iComputerIndex = 0 To UBound(szComputers) | ||
szComp = szComputers(iComputerIndex) | szComp = szComputers(iComputerIndex) | ||
If iComputerIndex < | If iComputerIndex <> UBound(szComputers) Then | ||
Trace "Creating FTP site on " & szComp & "." | Trace "Creating FTP site on " & szComp & "." | ||
End If | End If | ||
Line 163: | Line 163: | ||
Err.Clear | Err.Clear | ||
Set oMsFtpSvc = GetObject("IIS://" & szComp & "/MSFTPSVC") | Set oMsFtpSvc = GetObject("IIS://" & szComp & "/MSFTPSVC") | ||
If Err.Number < | If Err.Number <> 0 Then | ||
Display "Unable to open: " & "IIS://" & szComp & "/MSFTPSVC" | Display "Unable to open: " & "IIS://" & szComp & "/MSFTPSVC" | ||
End If | End If | ||
Line 185: | Line 185: | ||
' If the user specified a SiteNumber, then use that. Otherwise, | ' If the user specified a SiteNumber, then use that. Otherwise, | ||
' test successive numbers under MSFTPSVC until an unoccupied slot is found | ' test successive numbers under MSFTPSVC until an unoccupied slot is found | ||
If iSiteNumber < | If iSiteNumber <> 0 Then | ||
Set oNewFtpServer = oMsFtpSvc.Create("IIsFtpServer", iSiteNumber) | Set oNewFtpServer = oMsFtpSvc.Create("IIsFtpServer", iSiteNumber) | ||
oNewFtpServer.SetInfo | oNewFtpServer.SetInfo | ||
If (Err.Number < | If (Err.Number <> 0) Then | ||
WScript.Echo "Couldn't create a FTP site with the specified number: " & iSiteNumber | WScript.Echo "Couldn't create a FTP site with the specified number: " & iSiteNumber | ||
WScript.Quit (1) | WScript.Quit (1) | ||
Line 215: | Line 215: | ||
Set oNewFtpServer = oMsFtpSvc.Create("IIsFtpServer", iIndex) | Set oNewFtpServer = oMsFtpSvc.Create("IIsFtpServer", iIndex) | ||
oNewFtpServer.SetInfo | oNewFtpServer.SetInfo | ||
If (Err.Number < | If (Err.Number <> 0) Then | ||
' If call to Create failed then try the next number | ' If call to Create failed then try the next number | ||
iIndex = iIndex + 1 | iIndex = iIndex + 1 | ||
Line 232: | Line 232: | ||
' sanity check at 10K sites | ' sanity check at 10K sites | ||
If (iIndex | If (iIndex > 10000) Then | ||
Display "Seem to be unable to create new FTP server. Server number is " & iIndex & "." | Display "Seem to be unable to create new FTP server. Server number is " & iIndex & "." | ||
WScript.Quit (1) | WScript.Quit (1) | ||
Line 268: | Line 268: | ||
' the next line "debounces" some startup errors | ' the next line "debounces" some startup errors | ||
WScript.Sleep 5000 | WScript.Sleep 5000 | ||
If (Err.Number < | If (Err.Number <> 0) Or (oNewFtpServer.ServerState <> 2) Then | ||
Display "Error starting FTP server!" | Display "Error starting FTP server!" | ||
Err.Clear | Err.Clear | ||
Line 280: | Line 280: | ||
' Display the usage message | ' Display the usage message | ||
Sub DisplayUsage | Sub DisplayUsage | ||
WScript.Echo "Usage: mkftpsite <-r|--RootDirectory ""ROOT DIRECTORY"" | WScript.Echo "Usage: mkftpsite <-r|--RootDirectory ""ROOT DIRECTORY"">" | ||
WScript.Echo " <-t|--Comment ""SERVER COMMENT"" | WScript.Echo " <-t|--Comment ""SERVER COMMENT"">" | ||
WScript.Echo " [-c|--Computer COMPUTER1[,COMPUTER2...]]" | WScript.Echo " [-c|--Computer COMPUTER1[,COMPUTER2...]]" | ||
WScript.Echo " [-o|--Port PORT NUM]" | WScript.Echo " [-o|--Port PORT NUM]" |
Revision as of 09:44, 21 July 2020
Article ID: 247364
Article Last Modified on 8/8/2007
APPLIES TO
- Microsoft Internet Information Services 5.0
This article was previously published under Q247364
SUMMARY
Microsoft Internet Information Services (IIS) version 5.0 includes several sample Windows Scripting Host (WSH) administration scripts in the %SystemDrive%\InetPub\AdminScripts folder. These sample scripts perform various administrative functions. The purpose of this article is to define a sample script to complement the existing set of scripts that create FTP virtual servers.
MORE INFORMATION
Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements.
WSH Sample ADSI Script
Save the following code as Mkftpsite.vbs in your %SystemDrive%\InetPub\AdminScripts folder:
'------------------------------------------------------------ ' ' This is a simple script to create a new virtual FTP server. ' ' Call this script with "-?" for usage instructions ' '------------------------------------------------------------ ' Force explicit declaration of all variables Option Explicit On Error Resume Next Dim bArgStart Dim bVerbose Dim iArgPort Dim iArgSiteNumber Dim iArgNum Dim oArgs Dim szArgComputers Dim szArgIPAddress Dim szArgRootDirectory Dim szArgServerComment bArgStart = True bVerbose = False iArgPort = 21 iArgSiteNumber = 0 szArgIPAddress = "" szArgComputers = Array(1) szArgComputers(0) = "LocalHost" Set oArgs = WScript.Arguments iArgNum = 0 While iArgNum < oArgs.Count Select Case LCase(oArgs(iArgNum)) Case "-o","--port": iArgNum = iArgNum + 1 iArgPort = oArgs(iArgNum) Case "-i","--ipaddress": iArgNum = iArgNum + 1 szArgIPAddress = oArgs(iArgNum) Case "-r","--rootdirectory": iArgNum = iArgNum + 1 szArgRootDirectory = oArgs(iArgNum) Case "-t","--comment": iArgNum = iArgNum + 1 szArgServerComment = oArgs(iArgNum) Case "-c","--computer": iArgNum = iArgNum + 1 szArgComputers = Split(oArgs(iArgNum),",",-1) Case "-n","--sitenumber": iArgNum = iArgNum + 1 iArgSiteNumber = CLng(oArgs(iArgNum)) Case "-d","--dontstart": bArgStart = False Case "-?","--help": Call DisplayUsage Case "-v","--verbose": bVerbose = True Case Else: WScript.Echo "Unknown argument " & oArgs(iArgNum) Call DisplayUsage End Select iArgNum = iArgNum + 1 Wend If (szArgRootDirectory = "") Or (szArgServerComment = "") Then If (szArgRootDirectory = "") Then WScript.Echo "Missing Root Directory" Else WScript.Echo "Missing Server Comment" End If Call DisplayUsage WScript.Quit(1) End If Call ASTCreateFtpSite(szArgIPAddress, szArgRootDirectory, szArgServerComment, iArgPort, szArgComputers, iArgSiteNumber, bArgStart) Sub ASTCreateFtpSite(szIPAddress, szRootDirectory, szServerComment, iPortNum, szComputers, iSiteNumber, bStart) Dim bDone Dim iComputerIndex Dim iIndex Dim oFtpServer Dim oFtpSite Dim oMsFtpSvc Dim oNewFtpServer Dim oNewDir Dim szBindings Dim szBindingString Dim szComp Dim szNewBindings On Error Resume Next For iComputerIndex = 0 To UBound(szComputers) szComp = szComputers(iComputerIndex) If iComputerIndex <> UBound(szComputers) Then Trace "Creating FTP site on " & szComp & "." End If ' Grab the ftp service object Err.Clear Set oMsFtpSvc = GetObject("IIS://" & szComp & "/MSFTPSVC") If Err.Number <> 0 Then Display "Unable to open: " & "IIS://" & szComp & "/MSFTPSVC" End If szBindingString = szIPAddress & ":" & iPortNum & ":" Trace "Making sure this FTP server doesn't conflict with another..." For Each oFtpServer in oMsFtpSvc If oFtpServer.Class = "IIsFtpServer" Then szBindings = oFtpServer.ServerBindings If szBindingString = szBindings(0) Then Display "The server bindings you specified are duplicated in another virtual FTP server." WScript.Quit (1) End If End If Next iIndex = 1 bDone = False Trace "Creating new FTP server..." ' If the user specified a SiteNumber, then use that. Otherwise, ' test successive numbers under MSFTPSVC until an unoccupied slot is found If iSiteNumber <> 0 Then Set oNewFtpServer = oMsFtpSvc.Create("IIsFtpServer", iSiteNumber) oNewFtpServer.SetInfo If (Err.Number <> 0) Then WScript.Echo "Couldn't create a FTP site with the specified number: " & iSiteNumber WScript.Quit (1) Else Err.Clear ' Verify that the newly created site can be retrieved Set oFtpSite = GetObject("IIS://" & szComp & "/MSFTPSVC/" & iSiteNumber) If (Err.Number = 0) Then bDone = True Trace "FTP server created. Path is - " & "IIS://" & szComp & "/MSFTPSVC/" & iSiteNumber Else WScript.Echo "Couldn't create a FTP site with the specified number: " & iSiteNumber WScript.Quit (1) End If End If Else While (Not bDone) Err.Clear Set oFtpSite = GetObject("IIS://" & szComp & "/MSFTPSVC/" & iIndex) If (Err.Number = 0) Then ' A ftp server is already defined at this position so increment iIndex = iIndex + 1 Else Err.Clear Set oNewFtpServer = oMsFtpSvc.Create("IIsFtpServer", iIndex) oNewFtpServer.SetInfo If (Err.Number <> 0) Then ' If call to Create failed then try the next number iIndex = iIndex + 1 Else Err.Clear ' Verify that the newly created site can be retrieved Set oFtpSite = GetObject("IIS://" & szComp & "/MSFTPSVC/" & iIndex) If (Err.Number = 0) Then bDone = True Trace "FTP server created. Path is - " & "IIS://" & szComp & "/MSFTPSVC/" & iIndex Else iIndex = iIndex + 1 End If End If End If ' sanity check at 10K sites If (iIndex > 10000) Then Display "Seem to be unable to create new FTP server. Server number is " & iIndex & "." WScript.Quit (1) End If Wend End If szNewBindings = Array(0) szNewBindings(0) = szBindingString oNewFtpServer.ServerBindings = szNewBindings oNewFtpServer.ServerComment = szServerComment oNewFtpServer.SetInfo ' Now create the root directory object. Trace "Setting the home directory..." Set oNewDir = oNewFtpServer.Create("IIsFtpVirtualDir", "ROOT") oNewDir.Path = szRootDirectory oNewDir.AccessRead = True Err.Clear oNewDir.SetInfo If (Err.Number = 0) Then Trace "Home directory set." Else Display "Error setting home directory." End If Trace "FTP site created!" If bStart = True Then Trace "Attempting to start new FTP server..." Err.Clear Set oNewFtpServer = GetObject("IIS://" & szComp & "/MSFTPSVC/" & iIndex) oNewFtpServer.Start ' the next line "debounces" some startup errors WScript.Sleep 5000 If (Err.Number <> 0) Or (oNewFtpServer.ServerState <> 2) Then Display "Error starting FTP server!" Err.Clear Else Trace "FTP server started succesfully!" End If End If Next End Sub ' Display the usage message Sub DisplayUsage WScript.Echo "Usage: mkftpsite <-r|--RootDirectory ""ROOT DIRECTORY"">" WScript.Echo " <-t|--Comment ""SERVER COMMENT"">" WScript.Echo " [-c|--Computer COMPUTER1[,COMPUTER2...]]" WScript.Echo " [-o|--Port PORT NUM]" WScript.Echo " [-i|--IPAddress IP ADDRESS]" WScript.Echo " [-n|--SiteNumber SITENUMBER]" WScript.Echo " [-d|--DontStart]" WScript.Echo " [-v|--Verbose]" WScript.Echo " [-?|--Help]" WScript.Echo "" WScript.Echo "IP ADDRESS Optional - The IP Address to assign to the new server" WScript.Echo "PORT NUM Optional - The port to which the server should bind" WScript.Echo "ROOT DIRECTORY Required - Full path to the root directory for the new server" WScript.Echo "SERVER COMMENT Required - The server comment (this is the name that appears" WScript.Echo " in the MMC)" WScript.Echo "SITENUMBER Optional - The site number is the number in the ADSI path that" WScript.Echo " the FTP server will be created at (i.e. MSFTPSVC/3)" WScript.Echo "" WScript.Echo "Example 1: mkftpsite -r D:\Roots\MyCompany --DontStart -t ""My Company Site""" WScript.Echo "Example 2: mkftpsite -r C:\Inetpub\ftproot -t Test -o 1021" WScript.Quit (1) End Sub Sub Display(Msg) WScript.Echo Now & " : ERROR: " & Msg WScript.Echo Now & " : ERROR: 0x" & Hex(Err.Number) & " - " & Err.Description End Sub Sub Trace(Msg) If bVerbose = True then WScript.Echo Now & " : " & Msg End If End Sub
- Call this script with the following syntax for full usage instructions:
CSCRIPT %SystemDrive%\InetPub\AdminScripts\MKFTPSITE.VBS -?
For more information on Microsoft scripting technologies, see the following Web site:
Keywords: kbhowto KB247364