Leaked source code of windows server 2003
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

'
' 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