EFTScriptSamples/vbs/VFSCheck.vbs

160 lines
5.4 KiB
Plaintext

'This script is provided AS IS. Back up Server configuration before attempting to run.
'FILENAME: VFSCheck.vbs
'DATE: 31 JAN 2012
'USE: This will list all the folders of a site and display their corresponding physical paths.
'Notes: There is some logic for error checking, but I never got it to work correctly
' There is additional logic that will delete folders from VFS if they do not have a matching Physical path.
'**** run cmd "cscript (script location)****
'Modify the section "CONSTANTS/PARAMETERS
Set SFTPServer = WScript.CreateObject("SFTPCOMInterface.CIServer")
'Get File Object
Set objFSO = CreateObject("Scripting.FileSystemObject") 'Output file Object
Set objFSO2 = CreateObject("Scripting.FileSystemObject") 'Check foler existince object
Set objFSO3 = CreateObject("Scripting.FileSystemObject") 'Error Log
'Create/overwrite log file
Set objLogFile = objFSO.CreateTextFile("virtual_folders.txt", True)
'Set objErrorLogFile = objFSO3.CreateTextFile("virtual_folders_errors.log", True)
'On Error Resume Next 'Added Error Capture instructions for some steps beyond this point.
'CONSTANTS/PARAMETERS:
txtServer = "localhost"
txtPort = "1100"
txtAdminUserName = "test"
txtPassword = "test"
txtSiteName = "MySite"
'***WARNING BACKUP CONFIG FILES BEFORE MODIFYING THE NEXT LINE!!
delFlag="False" 'Set to True to actually delete the VFS entry from EFT. ***WARNING BACKUP CONFIG FILES BEFORE DOING THIS!!
objLogFile.WriteLine("VFS Path, Physical Path, Folder Status")
'objErrorLogFile.WriteLine("Folder, Error, Hex, Source, Description")
If Not Connect(txtServer, txtPort, txtAdminUserName, txtPassword) Then
WScript.Quit(0)
End If
set Sites=SFTPServer.Sites
SitesTotal = Sites.count
For iCount=0 to Sites.count - 1
Set Site = Sites.Item(iCount)
if LCase(Trim(Site.Name)) = LCase(Trim(txtSiteName)) then
exit for
End if
Next
'The following step was used for debugging.
'Msgbox Site.GetRootFolder()
'This step kicks off the whole process. I used "" as the root since the recursion logic adds the / to the path.
GetNextFolder "", Site
WScript.Echo "Done"
SFTPServer.Close
Set SFTPServer = nothing
Function GetNextFolder (CurrFolder,objSite)
CurrFolder = CurrFolder & "/"
folderList = objSite.GetFolderList(CurrFolder)
if Err.Number <> 0 Then
objLogFile.WriteLine(CurrFolder & ", " & ", ERROR-FOLDER NOT FOUND IN VFS")
DisplayErrorInfo CurrFolder
else
arVFolders = Split(folderlist, CRLF)
recurseFlag=0
For Each fl in arVFolders
WScript.Echo "Exporting info for folder: " & CurrFolder & fl
'if the folder name has " at the end of it there are additional folders and we need to recurse to next level
if instr(fl,chr(34)) > 0 then
'strip " from the folder path
fl = Left(fl,len(fl)-1)
'set flag to recurse
recurseFlag=1
End if
'strip of the EFT Virtual informaiton
f2 = fl
fl = StripVirtualPortion(fl)
'WScript.Echo "Exporting info for folder: " & CurrFolder & fl
'Get the physical path
StrPhysical = objSite.GetPhysicalPath(CurrFolder & fl)
IF objFSO2.FolderExists(strPhysical) THEN
folderStat = "The folder exists"
ELSE
folderStat = "Sorry this folder does not exist"
'If Delete Flag is set remove VFS Entries where Physical folder does not exist
if delFlag = "True" then
objSite.RemoveFolder(CurrFolder & fl)
folderStat = folderStat & " and has been removed from VFS"
recurseFlag = 0
end if
END IF
'output infomaion to logfile
objLogFile.WriteLine(CurrFolder & fl & ", " & StrPhysical & ", " & folderStat)
'if the recurseFlag is set, call GetNextFolder again.
if recurseFlag > 0 then
GetNextFolder CurrFolder & fl,objSite
End if
Next
'if Err.Number <> 0 Then
' objLogFile.WriteLine(CurrFolder & fl & ", " & ", ERROR-FOLDER NOT FOUND IN VFS")
' DisplayErrorInfo (CurrFolder & fl)
' folderStat = "ERROR-FOLDER NOT FOUND IN VFS"
' else
' IF objFSO2.FolderExists(strPhysical) THEN
' folderStat = "The folder exists"
' ELSE
' folderStat = "Sorry this folder does not exist"
' 'If Delete Flag is set remove VFS Entries where Physical folder does not exist
' if delFlag = "True" then
' objSite.RemoveFolder(CurrFolder & fl)
' end if
' END IF
' 'output infomaion to logfile
' End IF 'error2
end if 'No Error
End Function
Function StripVirtualPortion(ByVal sPath)
Dim iPos , sVirtualFolderPath,bIsVirtual
iPos = InStr(1, sPath, " - Virtual", 1 )
If ( iPos > 0 ) Then
'WScript.Echo "-->Stripping VIRTUAL portion of folder name"
sVirtualFolderPath = sPath
sPath = Left( sPath, iPos -1 )
End If
StripVirtualPortion = sPath
End Function
Function Connect (serverOrIpAddress, port, username, password)
On Error Resume Next
Err.Clear
SFTPServer.Connect serverOrIpAddress, port, username, password
If Err.Number <> 0 Then
WScript.Echo "Error connecting to '" & serverOrIpAddress & ":" & port & "' -- " & err.Description & " [" & CStr(err.Number) & "]", vbInformation, "Error"
Connect = False
Exit Function
End If
Connect = True
End Function
Sub DisplayErrorInfo (CurrFolder)
objErrorLogFile.WriteLine(CurrFolder & ", " & Err & ", " & Hex(Err) & ", " & Err.Source & ", " & Err.Description)
WScript.Echo "Folder : " & CurrFolder
WScript.Echo "Error: : " & Err
WScript.Echo "Error (hex) : &H" & Hex(Err)
WScript.Echo "Source : " & Err.Source
WScript.Echo "Description : " & Err.Description
Err.Clear
End Sub