windows-nt/Source/XPSP1/NT/inetsrv/iis/img/scripts/iisapp.vbs
2020-09-26 16:20:57 +08:00

468 lines
16 KiB
Plaintext

'
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' VBScript Source File
'
' Script Name: IIsApp.vbs
'
Option Explicit
On Error Resume Next
'''''''''''''''
' Notice
WScript.Echo "This script has bugs that prevent it from working correctly."
WScript.Quit(0)
' Error codes
Const ERR_OK = 0
Const ERR_GENERAL_FAILURE = 1
'''''''''''''''''''''
' Messages
Const L_Path_Text = "Path"
Const L_HasBeen_Message = "has been"
Const L_Imported_Text = "imported"
Const L_Exported_Text = "exported"
Const L_Error_ErrorMessage = "Error"
Const L_GetComputerObject_ErrorMessage = "Could not get computer object"
Const L_Import_ErrorMessage = "Error while importing configuration."
Const L_Export_ErrorMessage = "Error while exporting configuration."
Const L_NotEnoughParams_ErrorMessage = "Not enough parameters."
'Const L_OnlyOneOper_ErrorMessage = "Please, specify only one operation at a time."
'Const L_UnknownPerm_ErrorMessage = "Unknown physical directory permission"
Const L_ScriptHelper_ErrorMessage = "Could not create an instance of the IIsScriptHelper object."
Const L_ChkScpHelperReg_ErrorMessage = "Please, check if the Microsoft.IIsScriptHelper is registered."
'''''''''''''''''''''
' Help
Const L_Empty_Text = ""
' General help messages
Const L_SeeHelp_Message = "Type IIsApp /? for help."
Const L_SeeImportHelp_Message = "Type IIsApp /import /? for help."
Const L_SeeExportHelp_Message = "Type IIsApp /export /? for help."
Const L_Help_HELP_General01_Text = "Description: quickly create, delete, load, or unload an ""Application"""
Const L_Help_HELP_General01p1_Text = " on a Web site, Virtual Directory or Directory."
Const L_Help_HELP_General02_Text = "Syntax: IIsApp [/s <server>] [/u <username>] [/p <password>] /<operation>"
Const L_Help_HELP_General03_Text = " <application>"
Const L_Help_HELP_General04_Text = "Parameters:"
Const L_Help_HELP_General05_Text = ""
Const L_Help_HELP_General06_Text = "Value Description"
Const L_Help_HELP_General07_Text = "/s <server> Connect to machine <server> [Default: this system]"
Const L_Help_HELP_General08_Text = "/u <username> Connect as <username> or <domain>\<username>"
Const L_Help_HELP_General09_Text = " [Default: current user]"
Const L_Help_HELP_General10_Text = "/p <password> Password for the <username> user"
Const L_Help_HELP_General11_Text = "<operation> /create Create an Application."
Const L_Help_HELP_General12_Text = " /remove Remove an Application."
Const L_Help_HELP_General13_Text = " /unload Unload an Application."
Const L_Help_HELP_General14_Text = " /enable Enable an Application."
Const L_Help_HELP_General15_Text = " /disable Disable an Application."
Const L_Help_HELP_General16_Text = " /getstatus Get the status of an Application."
Const L_Help_HELP_General17_Text = " /restartasp Restart an ASP Application."
Const L_Help_HELP_General18_Text = "<application> Application path. Use either the site name or metabase"
Const L_Help_HELP_General18p1_Text = " path to specify the site. (""Default Web Site"" or w3svc/1)"
Const L_Help_HELP_General22_Text = "For detailed usage:"
Const L_Help_HELP_General23_Text = "IIsApp /create /?"
Const L_Help_HELP_General24_Text = "IIsApp /remove /?"
Const L_Help_HELP_General25_Text = "IIsApp /unload /?"
Const L_Help_HELP_General26_Text = "IIsApp /enable /?"
Const L_Help_HELP_General27_Text = "IIsApp /disable /?"
Const L_Help_HELP_General28_Text = "IIsApp /getstatus /?"
Const L_Help_HELP_General29_Text = "IIsApp /restartasp /?"
' Create help messages
Const L_Help_HELP_Create01_Text = "Description: quickly create an ""Application"" on a Web Site, Virtual Directory or Directory."
Const L_Help_HELP_Create02_Text = "Syntax: IIsApp [/s <server>] [/u <username>] [/p <password>] /create"
Const L_Help_HELP_Create02p1_Text = " [/a (inproc|outproc|poolproc|<AppPoolID>)] <application>"
Const L_Help_HELP_Create13_Text = "/a Specify the type of application to create."
Const L_Help_HELP_Create13p1_Text = " Backward Compat Mode: inproc|outproc|poolproc"
Const L_Help_HELP_Create13p2_Text = " [Default: poolproc]"
Const L_Help_HELP_Create13p3_Text = " Enhanced Mode: <AppPoolID> assigns the app to an"
Const L_Help_HELP_Create13p4_Text = " application pool. [Default: parent's AppPoolID]"
Const L_Help_HELP_Create21_Text = "IIsApp /import /f c:\config.xml /sp /lm/w3svc/5/Root/401Kapp"
Const L_Help_HELP_Create21p1_Text = " /dp /lm/w3svc/1/Root/401Kapp"
' Remove help messages
Const L_Help_HELP_Remove01_Text = "Description: quickly remove an ""Application"" on a Web Site, Virtual Directory or Directory."
Const L_Help_HELP_Remove02_Text = "Syntax: IIsApp [/s <server>] [/u <username>] [/p <password>] /remove"
Const L_Help_HELP_Remove02p2_Text = " <application>"
Const L_Help_HELP_Remove13_Text = "/d <DecryptPass> Specifies the password used to encrypt encrypted"
Const L_Help_HELP_Remove13p1_Text = " configuration data. [Default: """"]"
Const L_Help_HELP_Remove14_Text = "/f <File> Configuration file"
Const L_Help_HELP_Remove15_Text = "/sp <SourcePath> The full metabase path to be exported."
Const L_Help_HELP_Remove16_Text = "/inherited Remove inherited settings if set."
Const L_Help_HELP_Remove17_Text = "/children Remove configuration for child nodes."
Const L_Help_HELP_Remove18_Text = "/apped Append configuration to configuration file if it exists."
Const L_Help_HELP_Remove19_Text = "IIsApp /export /f c:\config.xml /sp /lm/w3svc/5/Root/401Kapp"
''''''''''''''''''''''''
' Operation codes
Const OPER_CREATE = 1
Const OPER_REMOVE = 2
Const OPER_UNLOAD = 3
Const OPER_ENABLE = 4
Const OPER_DISABLE = 5
Const OPER_GETSTATUS = 6
Const OPER_RESTARTASP = 7
' Import/Export flags
Const APPCREATE_INPROC = 0
Const APPCREATE_OUTPROC = 1
Const APPCREATE_POOLPROC = 2
'
' Main block
'
Dim oScriptHelper
Dim strServer, strUser, strPassword, strSite
Dim intOperation, intResult
Dim strAppType
Dim aArgs
' Default values
strServer = "."
strUser = ""
strPassword = ""
intOperation = 0
strAppType = APPCREATE_POOLPROC
' Instantiate script helper object
Set oScriptHelper = CreateObject("Microsoft.IIsScriptHelper")
If Err.Number <> 0 Then
WScript.Echo L_ScriptHelper_ErrorMessage
WScript.Echo L_ChkScpHelperReg_ErrorMessage
WScript.Quit(ERR_GENERAL_FAILURE)
End If
Set oScriptHelper.ScriptHost = WScript
' Check if we are being run with cscript.exe instead of wscript.exe
oScriptHelper.CheckScriptEngine
' Command Line parsing
Dim argObj, arg
Set argObj = WScript.Arguments
' Minimum number of parameters must exist
If argObj.Count < 1 Then
WScript.Echo L_NotEnoughParams_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
oScriptHelper.ParseCmdLineOptions "server:s:1;user:u:1;password:p:1;[create:c:0;type:a:1];remove::0;unload::0" & _
"enable::0;disable::0;getstatus::0;restartasp::0"
If UBound(oScriptHelper.NamedArguments) < 0 Then
WScript.Echo L_NotEnoughParams_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
For Each arg In oScriptHelper.Switches
If IsHelpSwitch(arg) Then
DisplayHelpMessage
WScript.Quit(ERR_OK)
End If
Select Case arg
Case "server"
' Server information
strServer = oScriptHelper.GetSwitch(arg)
Case "user"
' User information
strUser = oScriptHelper.GetSwitch(arg)
Case "password"
' Password information
strPassword = oScriptHelper.GetSwitch(arg)
Case "create"
If (intOperation <> 0) Then
WScript.Echo L_OnlyOneOper_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
intOperation = OPER_CREATE
Case "type"
Select Case UCase(oScriptHelper.Switches(arg))
Case "INPROC"
strAppCreate = APPCREATE_INPROC
Case "OUTPROC"
strAppCreate = APPCREATE_OUTPROC
Case "POOLPROC"
strAppCreate = APPCREATE_POOLPROC
Case Else
strAppCreate = oScriptHelper.Switches(arg)
End Select
Case "remove"
If (intOperation <> 0) Then
WScript.Echo L_OnlyOneOper_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
intOperation = OPER_REMOVE
Case "unload"
If (intOperation <> 0) Then
WScript.Echo L_OnlyOneOper_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
intOperation = OPER_UNLOAD
Case "enable"
If (intOperation <> 0) Then
WScript.Echo L_OnlyOneOper_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
intOperation = OPER_ENABLE
Case "disable"
If (intOperation <> 0) Then
WScript.Echo L_OnlyOneOper_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
intOperation = OPER_DISABLE
Case "getstatus"
If (intOperation <> 0) Then
WScript.Echo L_OnlyOneOper_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
intOperation = OPER_GETSTATUS
Case "restartasp"
If (intOperation <> 0) Then
WScript.Echo L_OnlyOneOper_ErrorMessage
WScript.Echo L_SeeHelp_Message
WScript.Quit(ERR_GENERAL_FAILURE)
End If
intOperation = OPER_RESTARTASP
End Select
Next
' Check Parameters
If (intOperation = 0) Then
DisplayHelpMessage
WScript.Quit(ERR_GENERAL_FAILURE)
End If
' Initializes authentication with remote machine
intResult = oScriptHelper.InitAuthentication(strServer, strUser, strPassword)
If intResult <> 0 Then
WScript.Quit(intResult)
End If
' Choose operation
Select Case intOperation
Case OPER_CREATE
intResult = Create(strAppCreate)
Case OPER_REMOVE
intResult = Remove()
Case OPER_UNLOAD
intResult = Unload()
Case OPER_ENABLE
intResult = Enable()
Case OPER_DISABLE
intResult = Disable()
Case OPER_GETSTATUS
intResult = GetStatus()
Case OPER_RESTARTASP
intResult = RestartASP()
End Select
' Return value to command processor
WScript.Quit(intResult)
'''''''''''''''''''''''''
' End Of Main Block
'''''''''''''''''''''
'''''''''''''''''''''''''''
' DisplayHelpMessage
'''''''''''''''''''''''''''
Sub DisplayHelpMessage()
WScript.Echo L_Help_HELP_General01_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_General02_Text
WScript.Echo L_Help_HELP_General03_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_General04_Text
WScript.Echo L_Help_HELP_General05_Text
WScript.Echo L_Help_HELP_General06_Text
WScript.Echo L_Help_HELP_General07_Text
WScript.Echo L_Help_HELP_General08_Text
WScript.Echo L_Help_HELP_General09_Text
WScript.Echo L_Help_HELP_General10_Text
WScript.Echo L_Help_HELP_General11_Text
WScript.Echo L_Help_HELP_General12_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_General22_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_General23_Text
WScript.Echo L_Help_HELP_General24_Text
End Sub
Sub DisplayCreateHelpMessage()
WScript.Echo L_Help_HELP_Create01_Text
WScript.Echo L_Help_HELP_Create01p1_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_Create02_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_Status03_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_General06_Text
WScript.Echo L_Help_HELP_General07_Text
WScript.Echo L_Help_HELP_General08_Text
WScript.Echo L_Help_HELP_General09_Text
WScript.Echo L_Help_HELP_General10_Text
WScript.Echo L_Help_HELP_Status09_Text
WScript.Echo L_Help_HELP_Status09p1_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_Status10_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_Create11_Text
WScript.Echo L_Help_HELP_Create12_Text
WScript.Echo L_Help_HELP_Create13_Text
End Sub
Sub DisplayRemoveHelpMessage()
WScript.Echo L_Help_HELP_Remove01_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_Remove02_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_General06_Text
WScript.Echo L_Help_HELP_General07_Text
WScript.Echo L_Help_HELP_General08_Text
WScript.Echo L_Help_HELP_General09_Text
WScript.Echo L_Help_HELP_General10_Text
WScript.Echo L_Empty_Text
WScript.Echo L_Help_HELP_Remove11_Text
WScript.Echo L_Help_HELP_Remove12_Text
WScript.Echo L_Help_HELP_Remove13_Text
WScript.Echo L_Help_HELP_Remove14_Text
WScript.Echo L_Help_HELP_Remove15_Text
End Sub
'''''''''''''''''''''''''''
' Create Function
'''''''''''''''''''''''''''
Function Create(strAppCreate)
On Error Resume Next
Dim Site
Dim aSites
Dim ComputerObj
' Normalize path names (get all metabase paths)
aSites = oScriptHelper.FindWebSite(oScriptHelper.NamedArguments)
For Each Site In aSites
Next
Set ComputerObj = oScriptHelper.ProviderObj.get("IIsComputer='LM'")
If Err Then
WScript.Echo L_GetComputerObj_ErrorMessage
WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description
WScript.Quit(Err.Number)
End If
' Call Import method from the computer object
ComputerObj.Import strPassword, strFile, strSourcePath, strDestPath, intFlags, strLogFile
If Err Then
WScript.Echo L_Import_ErrorMessage
WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description
WScript.Quit(Err.Number)
End If
WScript.Echo L_Path_Text & " " & strSourcePath & " " & L_HasBeen_Message & " " & L_Imported_Text
End Function
'''''''''''''''''''''''''''
' Remove Function
'''''''''''''''''''''''''''
Function Remove()
On Error Resume Next
Dim ComputerObj
Set ComputerObj = oScriptHelper.ProviderObj.get("IIsComputer='LM'")
If Err Then
WScript.Echo L_GetComputerObj_ErrorMessage
WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description
WScript.Quit(Err.Number)
End If
' Call Import method from the computer object
ComputerObj.Export strPassword, strFile, strSourcePath, intFlags
If Err Then
WScript.Echo L_Export_ErrorMessage
WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description
WScript.Quit(Err.Number)
End If
WScript.Echo L_Path_Text & " " & strSourcePath & " " & L_HasBeen_Message & " " & L_Exported_Text
End Function
'''''''''''''''''''''''''''
' Helper Functions
'''''''''''''''''''''''''''
'''''''''''''''''''''''''''
' IsHelpSwitch
'
' Returns true if the specified
' parameter is a help switch
' (ie.: /?, /h, /H, /help, /HELP, etc)
'''''''''''''''''''''''''''
Function IsHelpSwitch(param)
Dim result
result = False
If Left(param, 1) = "/" or Left(param, 1) = "-" Then
Select Case UCase(Right(param, Len(param) - 1))
Case "?"
result = True
Case "H"
result = True
Case "HELP"
result = True
Case Else
result = False
End Select
End If
IsHelpSwitch = result
End Function