Just a short, simple blog for Bob to share his thoughts.
02 January 2007 • by Bob • FrontPage, Scripting
As the old adage says, "Necessity is the mother of invention." With that in mind, I had a friend drop by my office the other day and ask me a question that started me on another quest for code.
What he asked me was whether there was a way where he could create an off-line backup of his web site. Of course, there are whole sections of the industry these days that are devoted to such things, but he wanted a simple way to create a backup on his home or work computer of his web site that is hosted at an ISP. Some time ago I wrote a FrontPage VBA macro for another friend that could be used to automate publishing, but only from within the FrontPage application itself. Since the FrontPage application exists as a COM object, I theorized that I could rewrite the code from the macro into a Windows Script Host (WSH) application that should do the trick. The code that you see below is the results of my little 'experiment'.
Usage Notes:
Once you have taken the above items into account, copy & paste the script code into Notepad and save it to your computer with a "*.vbs" file extension. To execute the code, just double-click the script. The script will pop-up a message box when it has finished publishing a copy of the web site to your computer.
Option Explicit ' -------------------------------------------------- ' ' Declare our constants. ' ' -------------------------------------------------- Const fpPublishAddToExistingWeb = 2 Const fpPublishCopySubwebs = 4 Const fpPublishLogInTempDir = 8 Const fpPublishCopyAllFiles = 64 ' -------------------------------------------------- ' ' This section defines the publishing variables. ' ' -------------------------------------------------- Dim strSourceUrl, strDestinationFolder Dim strUsername, strPassword Dim strBackupDate, strBackupTime strBackupDate = Cstr(Year(Date())) & _ Right("00" & Cstr(Month(Date())),2) & _ Right("00" & Cstr(Day(Date())),2) strBackupTime = Right("00" & Cstr(Hour(Time())),2) & _ Right("00" & Cstr(Minute(Time())),2) & _ Right("00" & Cstr(Second(Time())),2) strSourceUrl = "https://www.example.com/" strDestinationFolder = "c:\Backups\www.example.com\" & _ strBackupDate & "_" & strBackupTime strUsername = "server\administrator" strPassword = "Password1" ' -------------------------------------------------- ' ' This section checks to see if FrontPage is ' installed, and exits if it is not installed. ' ' -------------------------------------------------- ' wait 10 seconds to "debounce" the server WScript.Sleep 10000 ' get a FrontPage Application object Dim objFP: Set objFP = WScript.CreateObject("FrontPage.Application") ' exit if the object does not exist If Err.Number = -2147352567 Then WScript.Quit ' -------------------------------------------------- ' ' This section publishes the webs. ' ' -------------------------------------------------- ' sanitize the publishing path strDestinationFolder = CleanPath(strDestinationFolder) ' only continue the path can actually be created If MakePath(strDestinationFolder) = True Then ' open the root web on the source objFP.Webs.Open strSourceUrl, strUsername, strPassword ' publish the root web to the destination objFP.ActiveWeb.Publish strDestinationFolder, _ fpPublishAddToExistingWeb + fpPublishCopySubwebs + fpPublishCopyAllFiles + fpPublishLogInTempDir ' close the root web objFP.ActiveWeb.Close End If ' -------------------------------------------------- ' ' This section cleans up and exits. ' ' -------------------------------------------------- Set objFP = Nothing WScript.Quit ' ---------------------------------------- ' ' This function builds a path ' ' PASS: File path to construct ' RETURN: TRUE/FALSE for success/failure ' ' ---------------------------------------- Function MakePath(tmpText) On Error Resume Next Dim tx,ty,tz Dim tmpFSO Dim blnTempStatus Set tmpFSO = WScript.CreateObject("Scripting.FileSystemObject") blnTempStatus = True ty = Split(tmpText,"\") For tx = 0 To UBound(ty) tz = tz & ty(tx) & "\" If tmpFSO.FolderExists(tz) = False Then tmpFSO.CreateFolder(tz) If Err.Number <> 0 Then blnTempStatus = False End If Next MakePath = blnTempStatus End Function ' ---------------------------------------- ' ' This function sanitizes a path for valid characters ' ' PASS: File path to construct ' RETURN: New path ' ' ---------------------------------------- Function CleanPath(tmpText) On Error Resume Next Const tmpValid = "\.-1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" Dim tx,ty,tz For tx = 1 To Len(tmpText) ty = Mid(tmpText,tx,1) If (InStr(tmpValid,ty)>0) Or (tx=2 and ty=":") Then tz = tz & ty Else tz = tz & "_" End If Next CleanPath = tz End Function
Happy coding!
Note: This blog was originally posted at http://blogs.msdn.com/robert_mcmurray/