' ' Copyright (c) Microsoft Corporation. All rights reserved. ' ' VBScript Source File ' ' Script Name: IIsBack.vbs ' Option Explicit On Error Resume Next ' Error codes Const ERR_OK = 0 Const ERR_GENERAL_FAILURE = 1 ''''''''''''''''''''' ' Messages Const L_SwitchNeedArg_ErrorMessage = "Switch needs argument." Const L_Backup_Text = "Backup" Const L_Version_Text = "version" Const L_HasBeen_Message = "has been" Const L_Created_Text = "CREATED" Const L_Restored_Text = "RESTORED" Const L_Deleted_Text = "DELETED" Const L_BackupName_Text = "Backup Name" Const L_BackupVersion_Text = "Version #" Const L_DateTime_Text = "Date/Time" Const L_Error_ErrorMessage = "Error" Const L_OperationRequired_ErrorMessage = "Please specify an operation before the arguments." Const L_MinInfoNeeded_ErrorMessage = "Need at least ." Const L_NeedNameVersion_ErrorMessage = "Need at least and ." Const L_NotEnoughParams_ErrorMessage = "Not enough parameters." Const L_OnlyOneOper_ErrorMessage = "Please specify only one operation at a time." Const L_ComputerObj_ErrorMessage = "Unable to get computer object." Const L_Backup_ErrorMessage = "Unable to backup metabase." Const L_Restore_ErrorMessage = "Unable to restore metabase." Const L_Delete_ErrorMessage = "Unable to delete metabase backup." Const L_List_ErrorMessage = "Unable to list metabase backups." Const L_NoBackups_Message = "No backups exist." Const L_ScriptHelper_ErrorMessage = "Could not create an instance of the IIsScriptHelper object." Const L_ChkScpHelperReg_ErrorMessage = "Please register the Microsoft.IIsScriptHelper component." Const L_CmdLib_ErrorMessage = "Unable to create instance of the CmdLib object." Const L_PassWithoutUser_ErrorMessage = "Please specify /u switch before using /p." Const L_WMIConnect_ErrorMessage = "Could not connect to WMI provider." Const L_BackupNotFound_ErrorMessage = "Backup doesn't exist. HIGHEST_VERSION only works with an existent backup." Const L_VersionTooBig_ErrorMessage = "Version number is too big." Const L_InvalidVersion_ErrorMessage = "Invalid version number." Const L_InvalidBackupName_ErrorMessage = "Invalid backup name." Const L_IncorrectPassword_ErrorMessage = "The password specified is incorrect." Const L_BackupExists_ErrorMessage = "Backup already exists. Please specify another name or use /overwrite." Const L_InvalidSwitch_ErrorMessage = "Invalid switch: " ''''''''''''''''''''' ' Help ' General help messages Const L_SeeHelp_Message = "Type IIsBack /? for help." Const L_SeeBackupHelp_Message = "Type IIsBack /backup /? for help." Const L_SeeRestoreHelp_Message = "Type IIsBack /restore /? for help." Const L_SeeDeleteHelp_Message = "Type IIsBack /delete /? for help." Const L_SeeListHelp_Message = "Type IIsBack /list /? for help." Const L_Help_HELP_General01_Text = "Description: backup/restore IIS configuration, delete backups, list all backups" Const L_Help_HELP_General02_Text = "Syntax: IIsBack [/s [/u [/p ]]] /" Const L_Help_HELP_General03_Text = " [arguments]" Const L_Help_HELP_General04_Text = "Parameters:" Const L_Help_HELP_General06_Text = "Value Description" Const L_Help_HELP_General07_Text = "/s Connect to machine [Default: this system]" Const L_Help_HELP_General08_Text = "/u Connect as or \" Const L_Help_HELP_General09_Text = " [Default: current user]" Const L_Help_HELP_General10_Text = "/p Password for the user" Const L_Help_HELP_General11_Text = " /backup Backup the IIS Server (includes all" Const L_Help_HELP_General12_Text = " site data and settings)." Const L_Help_HELP_General13_Text = " /restore Restore the IIS Server from backup" Const L_Help_HELP_General14_Text = " (overwrites all site data and settings)." Const L_Help_HELP_General15_Text = " /delete Deletes a backup." Const L_Help_HELP_General16_Text = " /list List all backups." Const L_Help_HELP_General17_Text = "For detailed usage:" Const L_Help_HELP_General18_Text = "IIsBack /backup /?" Const L_Help_HELP_General19_Text = "IIsBack /restore /?" Const L_Help_HELP_General20_Text = "IIsBack /delete /?" Const L_Help_HELP_General21_Text = "IIsBack /list /?" ' Common to all status change commands Const L_Help_HELP_Common17_Text = "/b Description for the backup file." Const L_Help_HELP_Common17p1_Text = " [Default: ""SampleBackup""]" 'Const L_Help_HELP_Common10_Text = " This virtual path must already exist." Const L_Help_HELP_Common11_Text = "Examples:" ' Backup help messages Const L_Help_HELP_Backup01_Text = "Description: Backup the IIS Server (includes all site data and settings)." Const L_Help_HELP_Backup02_Text = "Syntax: IIsBack [/s [/u [/p ]]] /backup" Const L_Help_HELP_Backup02p1_Text = " [/b ] [/v ] [/e ]" Const L_Help_HELP_Backup02p2_Text = " [/overwrite]" Const L_Help_HELP_Backup18_Text = "/v Specifies the version number to be assigned to" Const L_Help_HELP_Backup18p1_Text = " the backup. Can be any integer, HIGHEST_VERSION," Const L_Help_HELP_Backup18p2_Text = " or NEXT_VERSION. [Default: NEXT_VERSION]" Const L_Help_HELP_Backup19_Text = "/e Encrypt the backup file with the provided password" 'Const L_Help_HELP_Backup19p1_Text = " instead of encrypting using the machine key" Const L_Help_HELP_Backup20_Text = "/overwrite Back up even if a backup of the same name and" Const L_Help_HELP_Backup20p1_Text = " version exists in the specified location," Const L_Help_HELP_Backup20p2_Text = " overwriting if necessary. [Default: disabled]" Const L_Help_HELP_Backup21_Text = "IIsBack /backup" Const L_Help_HELP_Backup22_Text = "IIsBack /s Server1 /u Administrator /p p@ssW0rd /backup /b NewBackup" ' Restore help messages Const L_Help_HELP_Restore01_Text = "Description: Restore the IIS Server from backup (overwrites all site data" Const L_Help_HELP_Restore01p1_Text = " and settings)." Const L_Help_HELP_Restore02_Text = "Syntax: IIsBack [/s [/u [/p ]]] /restore" Const L_Help_HELP_Restore02p1_Text = " /b [/v ] [/e ]" Const L_Help_HELP_Restore18_Text = "/v Specifies the version number of the backup." Const L_Help_HELP_Restore18p1_Text = " Can be any integer or HIGHEST_VERSION." Const L_Help_HELP_Restore19_Text = "/e If the backup was encrypted using a user specified" Const L_Help_HELP_Restore19p1_Text = " password, you must supply the correct password to" Const L_Help_HELP_Restore19p2_Text = " restore the backup." Const L_Help_HELP_Restore21_Text = "IIsBack /restore /b MyBackup /v HIGHEST_VERSION" Const L_Help_HELP_Restore22_Text = "IIsBack /s Server1 /u Administrator /p p@ssW0rd /restore /b MyBackup /v 2" ' Delete help messages Const L_Help_HELP_Delete01_Text = "Description: Delete an existing backup file." Const L_Help_HELP_Delete02_Text = "Syntax: IIsBack [/s [/u [/p ]]] /delete" Const L_Help_HELP_Delete02p1_Text = " /b /v " Const L_Help_HELP_Delete18_Text = "/v Specifies the version number to delete. Can be" Const L_Help_HELP_Delete18p1_Text = " integer or HIGHEST_VERSION." Const L_Help_HELP_Delete19_Text = "IIsBack /delete /b MyBackup /v HIGHEST_VERSION" Const L_Help_HELP_Delete20_Text = "IIsBack /s Server1 /u Administrator /p p@ssWOrd /delete /b MyBackup /v 2" ' List help messages Const L_Help_HELP_List01_Text = "Description: List all backup files." Const L_Help_HELP_List02_Text = "Syntax: IIsBack [/s [/u [/p ]]] /list" Const L_Help_HELP_List18_Text = "IIsBack /list" Const L_Help_HELP_List19_Text = "IIsBack /s Server1 /u Administrator /p p@ssW0rd /list" '''''''''''''''''''''''' ' Operation codes Const OPER_BACKUP = 1 Const OPER_RESTORE = 2 Const OPER_DELETE = 3 Const OPER_LIST = 4 ' Backup/Restore contants Const BACKUP_DEFAULT_NAME = "SampleBackup" Const MD_BACKUP_HIGHEST_VERSION = &HFFFFFFFE ' Backup, Restore, Delete Const MD_BACKUP_NEXT_VERSION = &HFFFFFFFF ' Backup Const MD_BACKUP_OVERWRITE = 1 ' Backup Const MD_BACKUP_SAVE_FIRST = 2 ' Backup Const MD_BACKUP_MAX_VERSION = 9999 ' Limit Const MD_BACKUP_MAX_LEN = 100 ' Limit Const MD_BACKUP_NO_MORE_BACKUPS = &H80070103 ' EnumBackups Const INVALID_VERSION = -3 ' ' Main block ' Dim oScriptHelper, oCmdLib Dim strServer, strUser, strPassword Dim strName, strBackPassword Dim intOperation, intResult, intVersion Dim aArgs, arg Dim bOverwrite Dim strCmdLineOptions Dim oError ' Default values strServer = "." strUser = "" strPassword = "" intOperation = 0 strName = "SampleBackup" strBackPassword = "" bOverwrite = False ' 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 ' Minimum number of parameters must exist If WScript.Arguments.Count < 1 Then WScript.Echo L_NotEnoughParams_ErrorMessage WScript.Echo L_SeeHelp_Message WScript.Quit(ERR_GENERAL_FAILURE) End If strCmdLineOptions = "[server:s:1;user:u:1;password:p:1];[backup::0;overwrite::0];restore::0;" & _ "delete::0;list::0;backupname:b:1;version:v:1;bkpasswd:e: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 WScript.Echo L_InvalidSwitch_ErrorMessage & 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 "backup" If (intOperation <> 0) Then WScript.Echo L_OnlyOneOper_ErrorMessage WScript.Echo L_SeeHelp_Message WScript.Quit(ERR_GENERAL_FAILURE) End If intOperation = OPER_BACKUP If oScriptHelper.IsHelpRequested(arg) Then DisplayBackupHelpMessage WScript.Quit(ERR_OK) End If strName = oScriptHelper.GetSwitch("backupname") If strName = "" Then strName = BACKUP_DEFAULT_NAME End If If oScriptHelper.Switches.Exists("version") Then intVersion = oScriptHelper.GetSwitch("version") Else intVersion = "NEXT_VERSION" End If strBackPassword = CStr(oScriptHelper.GetSwitch("bkpasswd")) If oScriptHelper.Switches.Exists("overwrite") Then bOverwrite = True End If Case "restore" If (intOperation <> 0) Then WScript.Echo L_OnlyOneOper_ErrorMessage WScript.Echo L_SeeHelp_Message WScript.Quit(ERR_GENERAL_FAILURE) End If intOperation = OPER_RESTORE If oScriptHelper.IsHelpRequested(arg) Then DisplayRestoreHelpMessage WScript.Quit(ERR_OK) End If strName = oScriptHelper.GetSwitch("backupname") If strName = "" Then WScript.Echo L_MinInfoNeeded_ErrorMessage WScript.Echo L_SeeRestoreHelp_Message WScript.Quit(ERR_GENERAL_FAILURE) End If If oScriptHelper.Switches.Exists("version") Then intVersion = oScriptHelper.GetSwitch("version") Else intVersion = "HIGHEST_VERSION" End If strBackPassword = CStr(oScriptHelper.GetSwitch("bkpasswd")) Case "delete" If (intOperation <> 0) Then WScript.Echo L_OnlyOneOper_ErrorMessage WScript.Echo L_SeeHelp_Message WScript.Quit(ERR_GENERAL_FAILURE) End If intOperation = OPER_DELETE If oScriptHelper.IsHelpRequested(arg) Then DisplayDeleteHelpMessage WScript.Quit(ERR_OK) End If strName = oScriptHelper.GetSwitch("backupname") If strName = "" Or Not oScriptHelper.Switches.Exists("version") Then WScript.Echo L_NeedNameVersion_ErrorMessage WScript.Echo L_SeeDeleteHelp_Message WScript.Quit(ERR_GENERAL_FAILURE) End If intVersion = oScriptHelper.GetSwitch("version") Case "list" If (intOperation <> 0) Then WScript.Echo L_OnlyOneOper_ErrorMessage WScript.Echo L_SeeHelp_Message WScript.Quit(ERR_GENERAL_FAILURE) End If intOperation = OPER_LIST If oScriptHelper.IsHelpRequested(arg) Then DisplayListHelpMessage WScript.Quit(ERR_OK) End If 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 ' Validate backup name ValidateBackupName strName If Err.Number Then WScript.Echo L_InvalidBackupName_ErrorMessage WScript.Quit(Err.Number) End If ' Validate version intVersion = ValidateVersionNumber(intVersion) If Err.Number Then Select Case Err.Number Case &H6 WScript.Echo L_VersionTooBig_ErrorMessage Case &H5 WScript.Echo L_InvalidVersion_ErrorMessage End Select WScript.Quit(Err.Number) 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 Set oCmdLib = CreateObject("Microsoft.CmdLib") Set oCmdLib.ScriptingHost = WScript.Application If Err.Number Then WScript.Echo L_CmdLib_ErrorMessage WScript.Quit(Err.Number) Else strPassword = oCmdLib.GetPassword Set oCmdLib = Nothing End If 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_BACKUP intResult = BackupMetabase(strName, intVersion, strBackPassword, bOverwrite) Case OPER_RESTORE intResult = RestoreMetabase(strName, intVersion, strBackPassword) Case OPER_DELETE intResult = DeleteBackup(strName, intVersion) Case OPER_LIST intResult = ListBackups() 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 WScript.Echo L_Help_HELP_General02_Text WScript.Echo L_Help_HELP_General03_Text WScript.Echo WScript.Echo L_Help_HELP_General04_Text WScript.Echo 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_Help_HELP_General13_Text WScript.Echo L_Help_HELP_General14_Text WScript.Echo L_Help_HELP_General15_Text WScript.Echo L_Help_HELP_General16_Text WScript.Echo WScript.Echo L_Help_HELP_General17_Text WScript.Echo WScript.Echo L_Help_HELP_General18_Text WScript.Echo L_Help_HELP_General19_Text WScript.Echo L_Help_HELP_General20_Text WScript.Echo L_Help_HELP_General21_Text End Sub Sub DisplayBackupHelpMessage() WScript.Echo L_Help_HELP_Backup01_Text WScript.Echo WScript.Echo L_Help_HELP_Backup02_Text WScript.Echo L_Help_HELP_Backup02p1_Text WScript.Echo L_Help_HELP_Backup02p2_Text WScript.Echo WScript.Echo L_Help_HELP_General04_Text WScript.Echo 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_Common17_Text WScript.Echo L_Help_HELP_Common17p1_Text WScript.Echo L_Help_HELP_Backup18_Text WScript.Echo L_Help_HELP_Backup18p1_Text WScript.Echo L_Help_HELP_Backup18p2_Text WScript.Echo L_Help_HELP_Backup19_Text 'WScript.Echo L_Help_HELP_Backup19p1_Text WScript.Echo L_Help_HELP_Backup20_Text WScript.Echo L_Help_HELP_Backup20p1_Text WScript.Echo L_Help_HELP_Backup20p2_Text WScript.Echo WScript.Echo L_Help_HELP_Common11_Text WScript.Echo WScript.Echo L_Help_HELP_Backup21_Text WScript.Echo L_Help_HELP_Backup22_Text End Sub Sub DisplayRestoreHelpMessage() WScript.Echo L_Help_HELP_Restore01_Text WScript.Echo L_Help_HELP_Restore01p1_Text WScript.Echo WScript.Echo L_Help_HELP_Restore02_Text WScript.Echo L_Help_HELP_Restore02p1_Text WScript.Echo WScript.Echo L_Help_HELP_General04_Text WScript.Echo 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_Common17_Text WScript.Echo L_Help_HELP_Common17p1_Text WScript.Echo L_Help_HELP_Restore18_Text WScript.Echo L_Help_HELP_Restore18p1_Text WScript.Echo L_Help_HELP_Restore19_Text WScript.Echo L_Help_HELP_Restore19p1_Text WScript.Echo L_Help_HELP_Restore19p2_Text WScript.Echo WScript.Echo L_Help_HELP_Common11_Text WScript.Echo WScript.Echo L_Help_HELP_Restore21_Text WScript.Echo L_Help_HELP_Restore22_Text End Sub Sub DisplayDeleteHelpMessage() WScript.Echo L_Help_HELP_Delete01_Text WScript.Echo WScript.Echo L_Help_HELP_Delete02_Text WScript.Echo L_Help_HELP_Delete02p1_Text WScript.Echo WScript.Echo L_Help_HELP_General04_Text WScript.Echo 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_Common17_Text WScript.Echo L_Help_HELP_Common17p1_Text WScript.Echo L_Help_HELP_Delete18_Text WScript.Echo L_Help_HELP_Delete18p1_Text WScript.Echo WScript.Echo L_Help_HELP_Common11_Text WScript.Echo WScript.Echo L_Help_HELP_Delete19_Text WScript.Echo L_Help_HELP_Delete20_Text End Sub Sub DisplayListHelpMessage() WScript.Echo L_Help_HELP_List01_Text WScript.Echo WScript.Echo L_Help_HELP_List02_Text WScript.Echo WScript.Echo L_Help_HELP_General04_Text WScript.Echo 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 WScript.Echo L_Help_HELP_Common11_Text WScript.Echo WScript.Echo L_Help_HELP_List18_Text WScript.Echo L_Help_HELP_List19_Text End Sub ''''''''''''''''''''''''''' ' BackupMetabase ''''''''''''''''''''''''''' Function BackupMetabase(strName, intVersion, strBackPassword, bOverwrite) Dim ComputerObj Dim intFlags Dim strVersion On Error Resume Next oScriptHelper.WMIConnect If Err Then WScript.Echo L_WMIConnect_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description BackupMetabase = Err.Number Exit Function End If ' Grab the computer object Set ComputerObj = oScriptHelper.ProviderObj.Get("IIsComputer='LM'") If Err Then WScript.Echo L_ComputerObj_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description BackupMetabase = Err.Number Exit Function End If ' Build backup flags intFlags = MD_BACKUP_SAVE_FIRST If bOverwrite Then intFlags = intFlags Or MD_BACKUP_OVERWRITE End If ' Call Backup method ComputerObj.BackupWithPassword strName, intVersion, intFlags, strBackPassword If Err.Number Then Select Case Err.Number Case &H80070002 WScript.Echo L_BackupNotFound_ErrorMessage Case &H80070050 WScript.Echo L_BackupExists_ErrorMessage Case Else WScript.Echo L_Backup_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description End Select BackupMetabase = Err.Number Exit Function End If ' Pretty print If (intVersion = MD_BACKUP_NEXT_VERSION) Then strVersion = "NEXT_VERSION" Else If (intVersion = MD_BACKUP_HIGHEST_VERSION) Then strVersion = "HIGHEST_VERSION" Else strVersion = CStr(intVersion) End If End If WScript.Echo L_Backup_Text & " " & strName & " " & L_Version_Text & " " & strVersion & " " & _ L_HasBeen_Message & " " & L_Created_Text & "." ' Release object Set ComputerObj = Nothing BackupMetabase = 0 End Function ''''''''''''''''''''''''''' ' RestoreMetabase ''''''''''''''''''''''''''' Function RestoreMetabase(strName, intVersion, strBackPassword) Dim ComputerObj Dim strVersion On Error Resume Next oScriptHelper.WMIConnect If Err Then WScript.Echo L_WMIConnect_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description RestoreMetabase = Err.Number Exit Function End If ' Grab the computer object Set ComputerObj = oScriptHelper.ProviderObj.Get("IIsComputer='LM'") If Err Then WScript.Echo L_ComputerObj_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description RestoreMetabase = Err.Number Exit Function End If ' Call Restore method ComputerObj.RestoreWithPassword strName, intVersion, 0, strBackPassword If Err.Number Then Select Case Err.Number Case &H8007052B WScript.Echo L_IncorrectPassword_ErrorMessage Case Else WScript.Echo L_Restore_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description End Select RestoreMetabase = Err.Number Exit Function End If ' Pretty print If (intVersion = MD_BACKUP_NEXT_VERSION) Then strVersion = "NEXT_VERSION" Else If (intVersion = MD_BACKUP_HIGHEST_VERSION) Then strVersion = "HIGHEST_VERSION" Else strVersion = CStr(intVersion) End If End If WScript.Echo L_Backup_Text & " " & strName & " " & L_Version_Text & " " & strVersion & " " & _ L_HasBeen_Message & " " & L_Restored_Text & "." ' Release object Set ComputerObj = Nothing RestoreMetabase = 0 End Function ''''''''''''''''''''''''''' ' DeleteBackup ''''''''''''''''''''''''''' Function DeleteBackup(strName, intVersion) Dim ComputerObj Dim strVersion On Error Resume Next oScriptHelper.WMIConnect If Err Then WScript.Echo L_WMIConnect_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description DeleteMetabase = Err.Number Exit Function End If ' Grab the computer object Set ComputerObj = oScriptHelper.ProviderObj.Get("IIsComputer='LM'") If Err Then WScript.Echo L_ComputerObj_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description DeleteBackup = Err.Number Exit Function End If ' Call Delete method ComputerObj.DeleteBackup strName, intVersion If Err Then WScript.Echo L_Delete_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description DeleteBackup = Err.Number Exit Function End If ' Pretty print If (intVersion = MD_BACKUP_NEXT_VERSION) Then strVersion = "NEXT_VERSION" Else If (intVersion = MD_BACKUP_HIGHEST_VERSION) Then strVersion = "HIGHEST_VERSION" Else strVersion = CStr(intVersion) End If End If WScript.Echo L_Backup_Text & " " & strName & " " & L_Version_Text & " " & strVersion & " " & _ L_HasBeen_Message & " " & L_Deleted_Text & "." ' Release object Set ComputerObj = Nothing DeleteBackup = 0 End Function ''''''''''''''''''''''''''' ' ListBackups ''''''''''''''''''''''''''' Function ListBackups() Dim ComputerObj Dim strName, strVersion, strDateTime, strFmtDateTime Dim dtDate, dtTime Dim intIndex On Error Resume Next oScriptHelper.WMIConnect If Err.Number Then WScript.Echo L_WMIConnect_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description ListBackups = Err.Number Exit Function End If ' Grab the computer object Set ComputerObj = oScriptHelper.ProviderObj.Get("IIsComputer='LM'") If (Err.Number <> 0) Then WScript.Echo L_ComputerObj_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description ListBackups = ERR_GENERAL_FAILURE Exit Function End If intIndex = 0 Do While True ' Call EnumBackups method strName = "" computerObj.EnumBackups strName, intIndex, strVersion, strDateTime If (Err.Number <> 0) Then If (Err.Number = MD_BACKUP_NO_MORE_BACKUPS) Then Exit Do End If WScript.Echo L_List_ErrorMessage WScript.Echo L_Error_ErrorMessage & " &H" & Hex(Err.Number) & ": " & Err.Description Set computerObj = Nothing ListBackups = ERR_GENERAL_FAILURE Exit Function End If If intIndex = 0 Then WScript.Echo L_BackupName_Text & Space(35 - Len(L_BackupName_Text)) & L_BackupVersion_Text & _ Space(15 - Len(L_BackupVersion_Text)) & L_DateTime_Text WScript.Echo "========================================================================" End If ' Format DateTime dtDate = DateSerial(Mid(strDateTime, 1, 4), Mid(strDateTime, 5, 2), Mid(strDateTime, 7, 2)) dtTime = TimeSerial(Mid(strDateTime, 9, 2), Mid(strDateTime, 11, 2), Mid(strDateTime, 13, 2)) strFmtDateTime = FormatDateTime(dtDate) & " " & FormatDateTime(dtTime, vbLongTime) WScript.Echo strName & Space(35 - Len(strName)) & strVersion & Space(15 - Len(strVersion)) & strFmtDateTime intIndex = intIndex + 1 Loop ' Print message in case we don't have any backups to list If intIndex = 0 Then WScript.Echo L_NoBackups_Message End If ' Release object Set ComputerObj = Nothing ListBackups = 0 End Function '''''''''''''''''''''''''''''''''''' ' Helper Functions ''''''''''''''''''''''''''' Function ValidateVersionNumber(Version) If IsNumeric(Version) Then Version = CInt(Version) If Version > MD_BACKUP_MAX_VERSION Then Err.Raise &H6 End If If Version < 0 Then Err.Raise &H5 End If ValidateVersionNumber = Version Else Select Case Version Case "HIGHEST_VERSION" ValidateVersionNumber = MD_BACKUP_HIGHEST_VERSION Case "NEXT_VERSION" ValidateVersionNumber = MD_BACKUP_NEXT_VERSION Case Else Err.Raise &H5 End Select End If End Function Sub ValidateBackupName(strName) Dim i For i = 1 to Len(strName) If Asc(Mid(strName, i, 1)) >= 33 And Asc(Mid(strName, i, 1)) <= 47 Or _ Asc(Mid(strName, i, 1)) >= 58 And Asc(Mid(strName, i, 1)) <= 64 Or _ Asc(Mid(strName, i, 1)) > 122 Then Err.Raise &H5 End If Next End Sub