You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
921 lines
35 KiB
921 lines
35 KiB
'
|
|
' Copyright (c) Microsoft Corporation. All rights reserved.
|
|
'
|
|
' VBScript Source File
|
|
'
|
|
' Script Name: IIsCnfg.vbs
|
|
'
|
|
|
|
Option Explicit
|
|
On Error Resume Next
|
|
|
|
' Error codes
|
|
Const ERR_OK = 0
|
|
Const ERR_GENERAL_FAILURE = 1
|
|
|
|
'''''''''''''''''''''
|
|
' Messages
|
|
Const L_ConfImported_Text = "Configuration imported from %1 in file"
|
|
Const L_ConfImportedp2_Text = "%1 to %2 in the Metabase."
|
|
Const L_ConfExported_Text = "Configuration exported from %1 to file %2."
|
|
Const L_MDSaved_Text = "Metadata successfully flushed to disk."
|
|
|
|
Const L_Error_ErrorMessage = "Error &H%1: %2"
|
|
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_SaveData_ErrorMessage = "Error while flushing metabase."
|
|
Const L_OnlyOneOper_ErrorMessage = "Please specify only one operation at a time."
|
|
Const L_ScriptHelper_ErrorMessage = "Could not create an instance of the"
|
|
Const L_ScriptHelperp2_ErrorMessage = "IIsScriptHelper object."
|
|
Const L_ChkScpHelperReg_ErrorMessage = "Please register the Microsoft.IIsScriptHelper"
|
|
Const L_ChkScpHelperRegp2_ErrorMessage = "component."
|
|
Const L_CmdLib_ErrorMessage = "Could not create an instance of the CmdLib object."
|
|
Const L_ChkCmdLibReg_ErrorMessage = "Please register the Microsoft.CmdLib component."
|
|
Const L_WMIConnect_ErrorMessage = "Could not connect to WMI provider."
|
|
Const L_RequiredArgsMissing_ErrorMessage = "Required arguments are missing."
|
|
Const L_FileExpected_ErrorMessage = "Argument is a folder path while expecting a file"
|
|
Const L_FileExpectedp2_ErrorMessage = "path."
|
|
Const L_ParentFolderDoesntExist_ErrorMessage = "Parent folder doesn't exist."
|
|
Const L_FileDoesntExist_ErrorMessage = "Input file doesn't exist."
|
|
Const L_FileAlreadyExist_ErrorMessage = "Export file specified already exists."
|
|
Const L_NotEnoughParams_ErrorMessage = "Not enough parameters."
|
|
Const L_InvalidSwitch_ErrorMessage = "Invalid switch: %1"
|
|
Const L_IncorrectPassword_ErrorMessage = "The password specified is incorrect."
|
|
Const L_InvalidXML_ErrorMessage = "The import file appears to contain invalid XML."
|
|
Const L_Admin_ErrorMessage = "You cannot run this command because you are not an"
|
|
Const L_Adminp2_ErrorMessage = "administrator on the server you are trying to configure."
|
|
Const L_DriveLetter_Message = "Mapping local drive %1 to admin share on server %2"
|
|
Const L_Shell_ErrorMessage = "Could not create an instance of the WScript.Shell"
|
|
Const L_Shellp2_ErrorMessage = "object."
|
|
Const L_FS_ErrorMessage = "Could not create an instance of the"
|
|
Const L_FSp2_ErrorMessage = "Scripting.FileSystemObject object."
|
|
Const L_Network_ErrorMessage = "Could not create an instance of the"
|
|
Const L_Networkp2_ErrorMessage = "WScript.Network object."
|
|
Const L_BackingUp_Message = "Backing up server %1"
|
|
Const L_Restoring_Message = "Restoring on server %1"
|
|
Const L_Backup_ErrorMessage = "Failure creating backup."
|
|
Const L_BackupComplete_Message = "Backup complete."
|
|
Const L_Restore_ErrorMessage = "Failure restoring backup."
|
|
Const L_RestoreComplete_Message = "Restore complete."
|
|
Const L_UnMap_Message = "Unmapping local drive %1"
|
|
Const L_NoDrive_ErrorMessage = "No drives available for mapping on local machine."
|
|
Const L_Copy_Message = "Copying backup files..."
|
|
Const L_Copy_ErrorMessage = "Error copying files."
|
|
Const L_ReturnVal_ErrorMessage = "Call returned with code %1"
|
|
Const L_CopyComplete_Message = "Copy operation complete."
|
|
'''''''''''''''''''''
|
|
' Help
|
|
Const L_Empty_Text = ""
|
|
|
|
' General help messages
|
|
Const L_SeeHelp_Message = "Type IIsCnfg /? for help."
|
|
Const L_SeeImportHelp_Message = "Type IIsCnfg /import /? for help."
|
|
Const L_SeeExportHelp_Message = "Type IIsCnfg /export /? for help."
|
|
|
|
Const L_Help_HELP_General01_Text = "Description: Import and export IIS configuration."
|
|
Const L_Help_HELP_General02_Text = "Syntax: IIsCnfg [/s <server> [/u <username> [/p <password>]]]"
|
|
Const L_Help_HELP_General03_Text = " /<operation> [arguments]"
|
|
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>."
|
|
Const L_Help_HELP_General07p2_Text = " [Default: this system]"
|
|
Const L_Help_HELP_General08_Text = "/u <username> Connect as <domain>\<username> or"
|
|
Const L_Help_HELP_General09_Text = " <username>. [Default: current user]"
|
|
Const L_Help_HELP_General10_Text = "/p <password> Password for the <username> user."
|
|
Const L_Help_HELP_General11_Text = "<operation> /import Import configuration from"
|
|
Const L_Help_HELP_General11p1_Text = " a configuration file."
|
|
Const L_Help_HELP_General12_Text = " /export Export configuration into"
|
|
Const L_Help_HELP_General12p1_Text = " a configuration file."
|
|
Const L_Help_HELP_General13_Text = " /copy Copy configuration from"
|
|
Const L_Help_HELP_General14_Text = " one machine to another."
|
|
Const L_Help_HELP_General22_Text = "For detailed usage:"
|
|
Const L_Help_HELP_General23_Text = "IIsCnfg /import /?"
|
|
Const L_Help_HELP_General24_Text = "IIsCnfg /export /?"
|
|
Const L_Help_HELP_General25_Text = "IIsCnfg /copy /?"
|
|
Const L_Help_HELP_General26_Text = "IIsCnfg /save /?"
|
|
|
|
' Common help messages
|
|
Const L_Help_HELP_Common13_Text = "/d <DecryptPass> Specifies the password used to"
|
|
Const L_Help_HELP_Common13p1_Text = " decrypt encrypted configuration data."
|
|
Const L_Help_HELP_Common13p2_Text = " [Default: """"]"
|
|
Const L_Help_HELP_Common14_Text = "/f <File> Configuration file."
|
|
Const L_Help_HELP_Common15_Text = "/sp <SourcePath> The full metabase path to start"
|
|
Const L_Help_HELP_Common15p1_Text = " reading from the configuration file."
|
|
Const L_Help_HELP_Common21_Text = "Examples:"
|
|
|
|
' Copy help messages
|
|
Const L_Help_HELP_Copy1_Text = "Description: Copy configuration from a source server to a"
|
|
Const L_Help_HELP_Copy1p2_Text = " target server."
|
|
Const L_Help_HELP_Copy2_Text = "Syntax: iiscnfg [/s <server> [/u <username> [/p <password>]]]"
|
|
Const L_Help_HELP_Copy2p2_Text = " /copy /ts <target server> /tu <target user>"
|
|
Const L_Help_HELP_Copy2p3_Text = " /tp <target password>"
|
|
Const L_Help_HELP_Copy3_Text = "Parameters:"
|
|
Const L_Help_HELP_Copy4_Text = "Value Description"
|
|
Const L_Help_HELP_Copy5_Text = "/s <server> Connect to machine <server>"
|
|
Const L_Help_HELP_Copy5p2_Text = " [Default: this system]"
|
|
Const L_Help_HELP_Copy6_Text = "/u <username> Connect as <domain>/<username>"
|
|
Const L_Help_HELP_Copy7_Text = " or <username> [Default: current user]"
|
|
Const L_Help_HELP_Copy8_Text = "/p <password> Password for the <username> user"
|
|
Const L_Help_HELP_Copy9_Text = "/ts Target server to copy configuration to"
|
|
Const L_Help_HELP_Copy10_Text = "/tu Username to use when connecting to the"
|
|
Const L_Help_HELP_Copy10p2_Text = " target server"
|
|
Const L_Help_HELP_Copy11_Text = "/tp Password to use when connecting to the"
|
|
Const L_Help_HELP_Copy11p2_Text = " target server"
|
|
Const L_Help_HELP_Copy12_Text = "Examples:"
|
|
Const L_Help_HELP_Copy13_Text = "iiscnfg.vbs /copy /ts TargetServer /tu Administrator /tp Pk$^("
|
|
Const L_Help_HELP_Copy14_Text = "iiscnfg.vbs /s SourceServer /u Administrator /p Kj30W /copy"
|
|
Const L_Help_HELP_Copy14p2_Text = " /ts TargetServer /tu Administrator /tp Pk$^j"
|
|
|
|
' Import help messages
|
|
Const L_Help_HELP_Import01_Text = "Description: Import configuration from a configuration file."
|
|
Const L_Help_HELP_Import02_Text = "Syntax: IIsCnfg [/s <server> [/u <username> [/p <password>]]]"
|
|
Const L_Help_HELP_Import02p1_Text = " /import [/d <DeCryptPass>] /f <File> /sp <SourcePath>"
|
|
Const L_Help_HELP_Import02p2_Text = " /dp <DestPath> [/inherited] [/children] [/merge]"
|
|
Const L_Help_HELP_Import16_Text = "/dp <DestPath> The metabase path destination for"
|
|
Const L_Help_HELP_Import16p1_Text = " imported properties. If the keytype"
|
|
Const L_Help_HELP_Import16p2_Text = " of the SourcePath and the DestPath do"
|
|
Const L_Help_HELP_Import16p3_Text = " not match, an error occurs."
|
|
Const L_Help_HELP_Import17_Text = "/inherited Import inherited settings if set."
|
|
Const L_Help_HELP_Import18_Text = "/children Import configuration for child nodes."
|
|
Const L_Help_HELP_Import19_Text = "/merge Merge imported configuration with"
|
|
Const L_Help_HELP_Import19p1_Text = " existing configuration."
|
|
Const L_Help_HELP_Import22_Text = "IIsCnfg /import /f c:\config.xml /sp /lm/w3svc/5/Root/401Kapp"
|
|
Const L_Help_HELP_Import22p1_Text = " /dp /lm/w3svc/1/Root/401Kapp"
|
|
|
|
' Export help messages
|
|
Const L_Help_HELP_Export01_Text = "Description: Export configuration into a configuration file."
|
|
Const L_Help_HELP_Export02_Text = "Syntax: IIsCnfg [/s <server> [/u <username> [/p <password>]]]"
|
|
Const L_Help_HELP_Export02p1_Text = " /export [/d <DeCryptPass>] /f <File> /sp <SourcePath>"
|
|
Const L_Help_HELP_Export02p2_Text = " [/inherited] [/children]"
|
|
Const L_Help_HELP_Export17_Text = "/inherited Export inherited settings if set."
|
|
Const L_Help_HELP_Export18_Text = "/children Export configuration for child nodes."
|
|
Const L_Help_HELP_Export22_Text = "IIsCnfg /export /f c:\config.xml /sp /lm/w3svc/5/Root/401Kapp"
|
|
|
|
' Save help messages
|
|
Const L_Help_HELP_Save01_Text = "Description: Save configuration to disk."
|
|
Const L_Help_HELP_Save02_Text = "Syntax: iiscnfg [/s <server> [/u <username> [/p <password>]]]"
|
|
Const L_Help_HELP_Save02p2_Text = " /save"
|
|
Const L_Help_HELP_Save22_Text = "iiscnfg.vbs /save"
|
|
Const L_Help_HELP_Save23_Text = "iiscnfg.vbs /s SourceServer /u Administrator /p Kj30W /save"
|
|
|
|
''''''''''''''''''''''''
|
|
' Operation codes
|
|
Const OPER_IMPORT = 1
|
|
Const OPER_EXPORT = 2
|
|
Const OPER_COPY = 3
|
|
Const OPER_SAVE = 4
|
|
|
|
' Import/Export flags
|
|
Const IMPORT_EXPORT_INHERITED = 1
|
|
Const IMPORT_EXPORT_NODE_ONLY = 2
|
|
Const IMPORT_EXPORT_MERGE = 4
|
|
|
|
'
|
|
' Main block
|
|
'
|
|
Dim oScriptHelper, oCmdLib
|
|
Dim strServer, strUser, strPassword, strSite
|
|
Dim strTarServer, strTarUser, strTarPassword
|
|
Dim strFile, strDecPass, strSourcePath, strDestPath
|
|
Dim intOperation, intResult, intFlags
|
|
Dim aArgs, arg
|
|
Dim strCmdLineOptions
|
|
Dim oError
|
|
|
|
' Default values
|
|
strServer = "."
|
|
strUser = ""
|
|
strPassword = ""
|
|
strTarServer = ""
|
|
strTarUser = ""
|
|
strTarPassword = ""
|
|
intOperation = 0
|
|
strFile = ""
|
|
strDecPass = ""
|
|
strSourcePath = ""
|
|
strDestPath = ""
|
|
intFlags = IMPORT_EXPORT_NODE_ONLY
|
|
|
|
' Instantiate the CmdLib for output string formatting
|
|
Set oCmdLib = CreateObject("Microsoft.CmdLib")
|
|
If Err.Number <> 0 Then
|
|
WScript.Echo L_CmdLib_ErrorMessage
|
|
WScript.Echo L_ChkCmdLibReg_ErrorMessage
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
Set oCmdLib.ScriptingHost = WScript.Application
|
|
|
|
' Instantiate script helper object
|
|
Set oScriptHelper = CreateObject("Microsoft.IIsScriptHelper")
|
|
If Err.Number <> 0 Then
|
|
WScript.Echo L_ScriptHelper_ErrorMessage
|
|
WScript.Echo L_ScriptHelperp2_ErrorMessage
|
|
WScript.Echo L_ChkScpHelperReg_ErrorMessage
|
|
WScript.Echo L_ChkScpHelperRegp2_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
|
|
|
|
' Minimum number of parameters must exist
|
|
If WScript.Arguments.Count < 1 Then
|
|
WScript.Echo L_RequiredArgsMissing_ErrorMessage
|
|
WScript.Echo L_SeeHelp_Message
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
strCmdLineOptions = "[server:s:1;user:u:1;password:p:1];decpass:d:1;file:f:1;sourcepath:sp:1;" & _
|
|
"inherited:i:0;children:c:0;[import::0;destpath:dp:1;merge:m:0];save::0;" & _
|
|
"export::0;[copy::0;targetserver:ts:1;targetuser:tu:1;targetpassword:tp:1]"
|
|
Set oError = oScriptHelper.ParseCmdLineOptions(strCmdLineOptions)
|
|
|
|
If Not oError Is Nothing Then
|
|
If oError.ErrorCode = oScriptHelper.ERROR_NOT_ENOUGH_ARGS Then
|
|
' Not enough arguments for a specified switch
|
|
WScript.Echo L_NotEnoughParams_ErrorMessage
|
|
WScript.Echo L_SeeHelp_Message
|
|
Else
|
|
' Invalid switch
|
|
oCmdLib.vbPrintf L_InvalidSwitch_ErrorMessage, Array(oError.SwitchName)
|
|
WScript.Echo L_SeeHelp_Message
|
|
End If
|
|
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
If oScriptHelper.GlobalHelpRequested Then
|
|
DisplayHelpMessage
|
|
WScript.Quit(ERR_OK)
|
|
End If
|
|
|
|
For Each arg In oScriptHelper.Switches
|
|
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 "targetserver"
|
|
' Server information
|
|
strTarServer = oScriptHelper.GetSwitch(arg)
|
|
|
|
Case "targetuser"
|
|
' User information
|
|
strTarUser = oScriptHelper.GetSwitch(arg)
|
|
|
|
Case "targetpassword"
|
|
' Password information
|
|
strTarPassword = oScriptHelper.GetSwitch(arg)
|
|
|
|
Case "import"
|
|
If (intOperation <> 0) Then
|
|
WScript.Echo L_OnlyOneOper_ErrorMessage
|
|
WScript.Echo L_SeeHelp_Message
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
intOperation = OPER_IMPORT
|
|
|
|
If oScriptHelper.IsHelpRequested(arg) Then
|
|
DisplayImportHelpMessage
|
|
WScript.Quit(ERR_OK)
|
|
End If
|
|
|
|
Case "export"
|
|
If (intOperation <> 0) Then
|
|
WScript.Echo L_OnlyOneOper_ErrorMessage
|
|
WScript.Echo L_SeeHelp_Message
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
intOperation = OPER_EXPORT
|
|
|
|
If oScriptHelper.IsHelpRequested(arg) Then
|
|
DisplayExportHelpMessage
|
|
WScript.Quit(ERR_OK)
|
|
End If
|
|
|
|
Case "copy"
|
|
If (intOperation <> 0) Then
|
|
WScript.Echo L_OnlyOneOper_ErrorMessage
|
|
WScript.Echo L_SeeHelp_Message
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
intOperation = OPER_COPY
|
|
|
|
If oScriptHelper.IsHelpRequested(arg) Then
|
|
DisplayCopyHelpMessage
|
|
WScript.Quit(ERR_OK)
|
|
End If
|
|
|
|
Case "save"
|
|
If (intOperation <> 0) Then
|
|
WScript.Echo L_OnlyOneOper_ErrorMessage
|
|
WScript.Echo L_SeeHelp_Message
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
intOperation = OPER_SAVE
|
|
|
|
If oScriptHelper.IsHelpRequested(arg) Then
|
|
DisplaySaveHelpMessage
|
|
WScript.Quit(ERR_OK)
|
|
End If
|
|
|
|
Case "file"
|
|
strFile = oScriptHelper.GetSwitch(arg)
|
|
|
|
Case "decpass"
|
|
strDecPass = oScriptHelper.GetSwitch(arg)
|
|
|
|
Case "sourcepath"
|
|
strSourcePath = oScriptHelper.GetSwitch(arg)
|
|
|
|
Case "destpath"
|
|
strDestPath = oScriptHelper.GetSwitch(arg)
|
|
|
|
Case "inherited"
|
|
intFlags = intFlags Or IMPORT_EXPORT_INHERITED
|
|
|
|
Case "children"
|
|
intFlags = intFlags And Not IMPORT_EXPORT_NODE_ONLY
|
|
|
|
Case "merge"
|
|
intFlags = intFlags Or IMPORT_EXPORT_MERGE
|
|
|
|
End Select
|
|
Next
|
|
|
|
' Check Parameters
|
|
If intOperation = 0 Then
|
|
WScript.Echo L_OperationRequired_ErrorMessage
|
|
WScript.Echo L_SeeHelp_Message
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
If intOperation = OPER_SAVE Then
|
|
ElseIf intOperation = OPER_COPY Then
|
|
If strTarServer = "" Or strTarUser = "" Or strTarPassword = "" Then
|
|
WScript.Echo L_RequiredArgsMissing_ErrorMessage
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
Else
|
|
If strFile = "" Or strSourcePath = "" Or (intOperation = OPER_IMPORT And strDestPath = "") Then
|
|
WScript.Echo L_RequiredArgsMissing_ErrorMessage
|
|
If intOperation = OPER_IMPORT Then
|
|
WScript.Echo L_SeeImportHelp_Message
|
|
Else
|
|
WScript.Echo L_SeeExportHelp_Message
|
|
End If
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
End If
|
|
|
|
' Check if /p is specified but /u isn't. In this case, we should bail out with an error
|
|
If oScriptHelper.Switches.Exists("password") And Not oScriptHelper.Switches.Exists("user") Then
|
|
WScript.Echo L_PassWithoutUser_ErrorMessage
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
' Check if /u is specified but /p isn't. In this case, we should ask for a password
|
|
If oScriptHelper.Switches.Exists("user") And Not oScriptHelper.Switches.Exists("password") Then
|
|
strPassword = oCmdLib.GetPassword
|
|
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_IMPORT
|
|
intResult = Import(strDecPass, strFile, strSourcePath, strDestPath, intFlags)
|
|
|
|
Case OPER_EXPORT
|
|
intResult = Export(strDecPass, strFile, strSourcePath, intFlags)
|
|
|
|
Case OPER_COPY
|
|
intResult = Repl(strServer, strUser, strPassword, strTarServer, strTarUser, strTarPassword)
|
|
|
|
Case OPER_SAVE
|
|
intResult = SaveMD()
|
|
|
|
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_General07p2_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_General11p1_Text
|
|
WScript.Echo L_Help_HELP_General12_Text
|
|
WScript.Echo L_Help_HELP_General12p1_Text
|
|
WScript.Echo L_Help_HELP_General13_Text
|
|
WScript.Echo L_Help_HELP_General14_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
|
|
WScript.Echo L_Help_HELP_General25_Text
|
|
WScript.Echo L_Help_HELP_General26_Text
|
|
End Sub
|
|
|
|
Sub DisplayImportHelpMessage()
|
|
WScript.Echo L_Help_HELP_Import01_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Import02_Text
|
|
WScript.Echo L_Help_HELP_Import02p1_Text
|
|
WScript.Echo L_Help_HELP_Import02p2_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_General07p2_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_Common13_Text
|
|
WScript.Echo L_Help_HELP_Common13p1_Text
|
|
WScript.Echo L_Help_HELP_Common13p2_Text
|
|
WScript.Echo L_Help_HELP_Common14_Text
|
|
WScript.Echo L_Help_HELP_Common15_Text
|
|
WScript.Echo L_Help_HELP_Common15p1_Text
|
|
WScript.Echo L_Help_HELP_Import16_Text
|
|
WScript.Echo L_Help_HELP_Import16p1_Text
|
|
WScript.Echo L_Help_HELP_Import16p2_Text
|
|
WScript.Echo L_Help_HELP_Import16p3_Text
|
|
WScript.Echo L_Help_HELP_Import17_Text
|
|
WScript.Echo L_Help_HELP_Import18_Text
|
|
WScript.Echo L_Help_HELP_Import19_Text
|
|
WScript.Echo L_Help_HELP_Import19p1_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Common21_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Import22_Text
|
|
WScript.Echo L_Help_HELP_Import22p1_Text
|
|
End Sub
|
|
|
|
Sub DisplayCopyHelpMessage()
|
|
WScript.Echo L_Help_HELP_Copy1_Text
|
|
WScript.Echo L_Help_HELP_Copy1p2_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Copy2_Text
|
|
WScript.Echo L_Help_HELP_Copy2p2_Text
|
|
WScript.Echo L_Help_HELP_Copy2p3_Text
|
|
WScript.Echo L_Help_HELP_Copy3_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Copy4_Text
|
|
WScript.Echo L_Help_HELP_Copy5_Text
|
|
WScript.Echo L_Help_HELP_Copy5p2_Text
|
|
WScript.Echo L_Help_HELP_Copy6_Text
|
|
WScript.Echo L_Help_HELP_Copy7_Text
|
|
WScript.Echo L_Help_HELP_Copy8_Text
|
|
WScript.Echo L_Help_HELP_Copy9_Text
|
|
WScript.Echo L_Help_HELP_Copy10_Text
|
|
WScript.Echo L_Help_HELP_Copy10p2_Text
|
|
WScript.Echo L_Help_HELP_Copy11_Text
|
|
WScript.Echo L_Help_HELP_Copy11p2_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Copy12_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Copy13_Text
|
|
WScript.Echo L_Help_HELP_Copy14_Text
|
|
WScript.Echo L_Help_HELP_Copy14p2_Text
|
|
End Sub
|
|
|
|
Sub DisplayExportHelpMessage()
|
|
WScript.Echo L_Help_HELP_Export01_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Export02_Text
|
|
WScript.Echo L_Help_HELP_Export02p1_Text
|
|
WScript.Echo L_Help_HELP_Export02p2_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_General07p2_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_Common13_Text
|
|
WScript.Echo L_Help_HELP_Common13p1_Text
|
|
WScript.Echo L_Help_HELP_Common13p2_Text
|
|
WScript.Echo L_Help_HELP_Common14_Text
|
|
WScript.Echo L_Help_HELP_Common15_Text
|
|
WScript.Echo L_Help_HELP_Common15p1_Text
|
|
WScript.Echo L_Help_HELP_Export17_Text
|
|
WScript.Echo L_Help_HELP_Export18_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Common21_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Export22_Text
|
|
End Sub
|
|
|
|
Sub DisplaySaveHelpMessage()
|
|
WScript.Echo L_Help_HELP_Save01_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Save02_Text
|
|
WScript.Echo L_Help_HELP_Save02p2_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_General07p2_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_Common21_Text
|
|
WScript.Echo L_Empty_Text
|
|
WScript.Echo L_Help_HELP_Save22_Text
|
|
WScript.Echo L_Help_HELP_Save23_Text
|
|
End Sub
|
|
|
|
'''''''''''''''''''''''''''
|
|
' Copy Function
|
|
'''''''''''''''''''''''''''
|
|
Function Repl(strSourceServer, strSourceUser, strSourcePwd, strDestServer, strDestUser, strDestPwd)
|
|
|
|
If (strSourceServer = ".") Then
|
|
strSourceServer = ""
|
|
End If
|
|
|
|
' Do the first backup
|
|
|
|
Dim strBackupCommand
|
|
Dim strSourceDrive, strDrvLetter, strSourcePath
|
|
Dim oShell, oFS, oNetwork
|
|
Dim strDestDrive, strDestPath
|
|
Dim strCopyCommand, strDelCommand, strRestoreCommand
|
|
|
|
Set oShell = WScript.CreateObject("WScript.Shell")
|
|
If Err.Number <> 0 Then
|
|
WScript.Echo L_Shell_ErrorMessage
|
|
WScript.Echo L_Shellp2_ErrorMessage
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
Set oFS = WScript.CreateObject("Scripting.FileSystemObject")
|
|
If Err.Number <> 0 Then
|
|
WScript.Echo L_FS_ErrorMessage
|
|
WScript.Echo L_FSp2_ErrorMessage
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
Set oNetwork = WScript.CreateObject("WScript.Network")
|
|
If Err.Number <> 0 Then
|
|
WScript.Echo L_Network_ErrorMessage
|
|
WScript.Echo L_Networkp2_ErrorMessage
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
strBackupCommand = "cmd /c %SystemRoot%\system32\cscript.exe %SystemRoot%\system32\iisback.vbs /backup"
|
|
|
|
If strSourceServer <> "" Then
|
|
strBackupCommand = strBackupCommand & " /s " & strSourceServer
|
|
Else
|
|
strSourceServer = "127.0.0.1"
|
|
End If
|
|
|
|
If strSourceUser <> "" Then
|
|
strBackupCommand = strBackupCommand & " /u " & strSourceUser
|
|
End If
|
|
|
|
If strSourcePwd <> "" Then
|
|
strBackupCommand = strBackupCommand & " /p " & strSourcePwd
|
|
End If
|
|
|
|
' need overwrite in case a previous attempt failed
|
|
strBackupCommand = strBackupCommand & " /b iisreplback /overwrite"
|
|
|
|
' backup the source server
|
|
oCmdLib.vbPrintf L_BackingUp_Message, Array(strSourceServer)
|
|
intResult = oShell.Run(strBackupCommand, 1, TRUE)
|
|
|
|
WScript.Echo L_BackupComplete_Message
|
|
|
|
' Now map drive to source server
|
|
' Find a drive letter
|
|
|
|
strSourceDrive = "NO DRIVE"
|
|
For strDrvLetter = Asc("C") to Asc("Z")
|
|
If Not oFS.DriveExists(Chr(strDrvLetter)) Then
|
|
strSourceDrive = Chr(strDrvLetter)
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If strSourceDrive = "NO DRIVE" Then
|
|
' No drive letter available
|
|
WScript.Echo L_NoDrive_ErrorMessage
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
strSourceDrive = strSourceDrive & ":"
|
|
strSourcePath = "\\" & strSourceServer & "\ADMIN$"
|
|
|
|
' Map the drive
|
|
oCmdLib.vbPrintf L_DriveLetter_Message, Array(strSourceDrive, strSourceServer)
|
|
|
|
If strSourceUser <> "" Then
|
|
oNetwork.MapNetworkDrive strSourceDrive, strSourcePath, FALSE, strSourceUser, strSourcePwd
|
|
Else
|
|
oNetwork.MapNetworkDrive strSourceDrive, strSourcePath
|
|
End If
|
|
|
|
' Now map drive to destination server
|
|
' Find a drive letter
|
|
|
|
strDestDrive = "NO DRIVE"
|
|
For strDrvLetter = Asc("C") to Asc("Z")
|
|
If Not oFS.DriveExists(Chr(strDrvLetter)) Then
|
|
strDestDrive = Chr(strDrvLetter)
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
If strDestDrive = "NO DRIVE" Then
|
|
' No drive letter available
|
|
WScript.Echo L_NoDrive_ErrorMessage
|
|
WScript.Quit(ERR_GENERAL_FAILURE)
|
|
End If
|
|
|
|
strDestDrive = strDestDrive & ":"
|
|
strDestPath = "\\" & strDestServer & "\ADMIN$"
|
|
|
|
' Map the drive
|
|
oCmdLib.vbPrintf L_DriveLetter_Message, Array(strDestDrive, strDestServer)
|
|
|
|
If strDestUser <> "" Then
|
|
oNetwork.MapNetworkDrive strDestDrive, strDestPath, FALSE, strDestUser, strDestPwd
|
|
Else
|
|
oNetwork.MapNetworkDrive strDestDrive, strDestPath
|
|
End If
|
|
|
|
strCopyCommand = "cmd /c copy /Y " & strSourceDrive & "\system32\inetsrv\metaback\iisreplback.* "
|
|
strCopyCommand = strCopyCommand & strDestDrive & "\system32\inetsrv\metaback"
|
|
|
|
' Copy the files
|
|
WScript.Echo L_Copy_Message
|
|
WScript.Echo strCopyCommand
|
|
intResult = oShell.Run(strCopyCommand, 1, TRUE)
|
|
|
|
If intResult <> 0 Then
|
|
oCmdLib.vbPrintf L_ReturnVal_ErrorMessage, Array(intResult)
|
|
WScript.Echo L_Copy_ErrorMessage
|
|
WScript.Quit(intResult)
|
|
End If
|
|
|
|
strDelCommand = "cmd /c del /f /q " & strSourceDrive & "\system32\inetsrv\metaback\iisreplback.*"
|
|
intResult = oShell.Run(strDelCommand, 1, TRUE)
|
|
|
|
' Unmap drive to source server
|
|
oCmdLib.vbPrintf L_UnMap_Message, Array(strSourceDrive)
|
|
oNetwork.RemoveNetworkDrive strSourceDrive
|
|
|
|
' Now do the restore on the destination server
|
|
|
|
strRestoreCommand = "cmd /c %SystemRoot%\system32\cscript.exe %SystemRoot%\system32\iisback.vbs /restore /s " & strDestServer
|
|
strRestoreCommand = strRestoreCommand & " /u " & strDestUser
|
|
strRestoreCommand = strRestoreCommand & " /p " & strDestPwd
|
|
strRestoreCommand = strRestoreCommand & " /b iisreplback"
|
|
|
|
oCmdLib.vbPrintf L_Restoring_Message, Array(strDestServer)
|
|
intResult = oShell.Run(strRestoreCommand, 1, TRUE)
|
|
|
|
If intResult <> 0 Then
|
|
oCmdLib.vbPrintf L_ReturnVal_ErrorMessage, Array(intResult)
|
|
WScript.Echo L_Restore_ErrorMessage
|
|
WScript.Quit(intResult)
|
|
End If
|
|
|
|
WScript.Echo L_RestoreComplete_Message
|
|
|
|
strDelCommand = "cmd /c del /f /q " & strDestDrive & "\system32\inetsrv\metaback\iisreplback.*"
|
|
intResult = oShell.Run(strDelCommand, 1, TRUE)
|
|
|
|
' Unmap drive to destination server
|
|
oCmdLib.vbPrintf L_UnMap_Message, Array(strDestDrive)
|
|
oNetwork.RemoveNetworkDrive strDestDrive
|
|
|
|
WScript.Echo L_CopyComplete_Message
|
|
End Function
|
|
|
|
'''''''''''''''''''''''''''
|
|
' Import Function
|
|
'''''''''''''''''''''''''''
|
|
Function Import(strDecPass, strFile, strSourcePath, strDestPath, intFlags)
|
|
Dim ComputerObj
|
|
Dim strFilePath
|
|
|
|
On Error Resume Next
|
|
|
|
' Normalize path first
|
|
strFilePath = oScriptHelper.NormalizeFilePath(strFile)
|
|
If Err Then
|
|
Select Case Err.Number
|
|
Case &H80070002
|
|
WScript.Echo L_FileExpected_ErrorMessage
|
|
WScript.Echo L_FileExpectedp2_ErrorMessage
|
|
|
|
Case &H80070003
|
|
WScript.Echo L_ParentFolderDoesntExist_ErrorMessage
|
|
End Select
|
|
|
|
Import = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
oScriptHelper.WMIConnect
|
|
If Err.Number Then
|
|
WScript.Echo L_WMIConnect_ErrorMessage
|
|
oCmdLib.vbPrintf L_Error_ErrorMessage, Array(Hex(Err.Number), Err.Description)
|
|
Import = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
Set ComputerObj = oScriptHelper.ProviderObj.get("IIsComputer='LM'")
|
|
If Err.Number Then
|
|
Select Case Err.Number
|
|
Case &H80070005
|
|
WScript.Echo L_Admin_ErrorMessage
|
|
WScript.Echo L_Adminp2_ErrorMessage
|
|
|
|
Case Else
|
|
WScript.Echo L_GetComputerObj_ErrorMessage
|
|
oCmdLib.vbPrintf L_Error_ErrorMessage, Array(Hex(Err.Number), Err.Description)
|
|
End Select
|
|
|
|
Import = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
' Call Import method from the computer object
|
|
ComputerObj.Import strDecPass, strFilePath, strSourcePath, strDestPath, intFlags
|
|
If Err.Number Then
|
|
Select Case Err.Number
|
|
Case &H80070002
|
|
WScript.Echo L_FileDoesntExist_ErrorMessage
|
|
|
|
Case &H8007052B
|
|
WScript.Echo L_IncorrectPassword_ErrorMessage
|
|
|
|
Case &H800CC819
|
|
WScript.Echo L_InvalidXML_ErrorMessage
|
|
|
|
Case Else
|
|
WScript.Echo L_Import_ErrorMessage
|
|
WScript.Echo Err.Description
|
|
End Select
|
|
|
|
Import = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
oCmdLib.vbPrintf L_ConfImported_Text, Array(strSourcePath)
|
|
oCmdLib.vbPrintf L_ConfImportedp2_Text, Array(strFile, strDestPath)
|
|
End Function
|
|
|
|
'''''''''''''''''''''''''''
|
|
' Export Function
|
|
'''''''''''''''''''''''''''
|
|
Function Export(strDecPass, strFile, strSourcePath, intFlags)
|
|
Dim ComputerObj
|
|
Dim strFilePath
|
|
|
|
On Error Resume Next
|
|
|
|
' Normalize path first
|
|
strFilePath = oScriptHelper.NormalizeFilePath(strFile)
|
|
If Err Then
|
|
Select Case Err.Number
|
|
Case &H80070002
|
|
WScript.Echo L_FileExpected_ErrorMessage
|
|
WScript.Echo L_FileExpectedp2_ErrorMessage
|
|
|
|
Case &H80070003
|
|
WScript.Echo L_ParentFolderDoesntExist_ErrorMessage
|
|
End Select
|
|
|
|
Export = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
If oScriptHelper.FSObj.FileExists(strFilePath) Then
|
|
WScript.Echo L_FileAlreadyExist_ErrorMessage
|
|
Export = &H80070050
|
|
Exit Function
|
|
End If
|
|
|
|
oScriptHelper.WMIConnect
|
|
If Err.Number Then
|
|
WScript.Echo L_WMIConnect_ErrorMessage
|
|
oCmdLib.vbPrintf L_Error_ErrorMessage, Array(Hex(Err.Number), Err.Description)
|
|
Export = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
Set ComputerObj = oScriptHelper.ProviderObj.get("IIsComputer='LM'")
|
|
If Err.Number Then
|
|
Select Case Err.Number
|
|
Case &H80070005
|
|
WScript.Echo L_Admin_ErrorMessage
|
|
WScript.Echo L_Adminp2_ErrorMessage
|
|
|
|
Case Else
|
|
WScript.Echo L_GetComputerObj_ErrorMessage
|
|
oCmdLib.vbPrintf L_Error_ErrorMessage, Array(Hex(Err.Number), Err.Description)
|
|
End Select
|
|
|
|
Export = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
' Call Import method from the computer object
|
|
ComputerObj.Export strDecPass, strFilePath, strSourcePath, intFlags
|
|
If Err.Number Then
|
|
WScript.Echo L_Export_ErrorMessage
|
|
WScript.Echo Err.Description
|
|
Export = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
oCmdLib.vbPrintf L_ConfExported_Text, Array(strSourcePath, strFile)
|
|
End Function
|
|
|
|
'''''''''''''''''''''''''''
|
|
' SaveMD Function
|
|
'''''''''''''''''''''''''''
|
|
Function SaveMD()
|
|
Dim ComputerObj
|
|
|
|
On Error Resume Next
|
|
|
|
oScriptHelper.WMIConnect
|
|
If Err.Number Then
|
|
WScript.Echo L_WMIConnect_ErrorMessage
|
|
oCmdLib.vbPrintf L_Error_ErrorMessage, Array(Hex(Err.Number), Err.Description)
|
|
SaveMD = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
Set ComputerObj = oScriptHelper.ProviderObj.get("IIsComputer='LM'")
|
|
If Err.Number Then
|
|
Select Case Err.Number
|
|
Case &H80070005
|
|
WScript.Echo L_Admin_ErrorMessage
|
|
WScript.Echo L_Adminp2_ErrorMessage
|
|
|
|
Case Else
|
|
WScript.Echo L_GetComputerObj_ErrorMessage
|
|
oCmdLib.vbPrintf L_Error_ErrorMessage, Array(Hex(Err.Number), Err.Description)
|
|
End Select
|
|
|
|
SaveMD = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
' Call Import method from the computer object
|
|
ComputerObj.SaveData
|
|
If Err.Number Then
|
|
WScript.Echo L_SaveData_ErrorMessage
|
|
WScript.Echo Err.Description
|
|
SaveMD = Err.Number
|
|
Exit Function
|
|
End If
|
|
|
|
WScript.Echo L_MDSaved_Text
|
|
End Function
|