folder.vbs - vbscript script by ActiveXperts Software
folder.vbs checks folder size, count the number of files in a directory and all subdirectories, check the directory for a change.
Use folder.vbs directly from ActiveXperts Network Monitor; in the Manager's 'Monitor' menu, select 'New Check (Script)' and select folder.vbs. Configure the required parameter, or press 'Load a working sample'.
In ActiveXperts Network Monitor, Administrators can use three different scripting languages: Powershell, VBScript and SSH.
folder.vbs script code
' ///////////////////////////////////////////////////////////////////////////////
' // ActiveXperts Network Monitor - VBScript based checks
' // © ActiveXperts Software B.V.
' //
' // For more information about ActiveXperts Network Monitor and VBScript, please
' // visit the online ActiveXperts Network Monitor VBScript Guidelines at:
' // http://www.activexperts.com/support/network-monitor/online/vbscript/
' //
' ///////////////////////////////////////////////////////////////////////////////
Option Explicit
Const retvalUnknown = 1 ' ActiveXperts Network Monitor functions should always return True (-1, Success), False (0, Error) or retvalUnknown (1, Uncertain)
Dim SYSDATA, SYSEXPLANATION ' SYSDATA is displayed in the 'Data' column in the Manager; SYSEXPLANATION in the 'LastResponse' column
' ///////////////////////////////////////////////////////////////////////////////
' // To test a function outside Network Monitor (e.g. using CSCRIPT from the
' // command line), remove the comment character (') in the following 5 lines:
' Dim bResult
' bResult = CheckDirectorySize( "\\localhost\admin$", "", 300 )
' WScript.Echo "Return value: [" & bResult & "]"
' WScript.Echo "SYSDATA: [" & SYSDATA & "]"
' WScript.Echo "SYSEXPLANATION: [" & SYSEXPLANATION & "]"
' ////////////////////////////////////////////////////////////////////////////////////////
Function CheckDirectorySize( strHost, strAltCredentials, strPath, strLimitMB )
' Description:
' Check the directory size on a (remote) computer. Use network monitor service credentials to access the (remote) computer
' Parameters:
' 1) strHost As String - Hostname or IP address of the computer you want to monitor
' 2) strAltCredentials As String - Specify an empty string to use Metwork Monitor service credentials.
' To use alternate credentials, enter a server that is defined in Server Credentials table.
' (To define Server Credentials, choose Tools->Options->Server Credentials)'
' 3) strPath As String - UNC formatted directory path
' 4) strLimitMB As String - Maximum allowed directory size (MB)
' Usage:
' CheckDirectorySize( "<Server>, "<Empty String | Server>", "<\\Server\Share\Path>", <Max_MB> )
' Sample:
' CheckDirectorySize( "localhost", "", "\\localhost\admin$", 300 )
Dim strAltLogin, strAltPassword
Dim nSizeMB, nDiffMB
CheckDirectorySize = retvalUnknown ' Default return value, and will be shown as a yellow (uncertain) icon in the Manager
SYSDATA = "" ' SYSDATA displayed in the 'Data' column in the Manager
SYSEXPLANATION = "" ' SYSEXPLANATION displayed in the 'LastResponse' column in the Manager
strAltLogin = ""
strAltPassword = ""
' If alternate credentials are specified, retrieve the alternate login and password from the ActiveXperts global settings, and logon
If( strAltCredentials <> "" ) Then
If( Not getCredentials( strHost, strAltCredentials, strAltLogin, strAltPassword, SYSEXPLANATION )) Then
Exit Function
End If
If( Not netLogon( strHost, strAltLogin, strAltPassword, SYSEXPLANATION ) ) Then
Exit Function
End If
End If
nSizeMB = getFolderSizeMB( strPath )
If( nSizeMB < 0 ) Then
SYSEXPLANATION = "Unable to retrieve directory size. Make sure that the directory exists and that Network Monitor can access it."
CheckDirectorySize = retvalUnknown
Else
nDiffMB = strLimitMB - nSizeMB
SYSDATA = nSizeMB
SYSEXPLANATION = "Directory size=[" & nSizeMB & " MB], maximum allowed size=[" & strLimitMB & " MB]"
If( nDiffMB >= 0 ) Then
CheckDirectorySize = True
Else
CheckDirectorySize = False
End If
End If
' If alternate login is used, logoff now
If( strAltLogin <> "" ) Then
netLogoff( strHost )
End If
End Function
' /////////////////////////////////////////////////////////////////////////////
Function CheckDirectoryCount( strHost, strAltCredentials, strPath, bIncludeDirsInCount, nMax )
' Description:
' Count the number of files in a directory and all subsirectories
' Parameters:
' 1) strHost As String - Hostname or IP address of the computer you want to monitor
' 2) strAltCredentials As String - Specify an empty string to use Metwork Monitor service credentials.
' To use alternate credentials, enter a server that is defined in Server Credentials table.
' (To define Server Credentials, choose Tools->Options->Server Credentials)'
' 3) strPath - UNC formatted file path
' 4) bIncludeDirsInCount - Also count a directory as a file
' 5) nMax - Maximum number of files (and directories) allowed
' Usage:
' CheckDirectoryCount( "<Server>, "<Empty String | Server>"", "<\\Server\Share\Path>", [ True | False ], <Max_Files> )
' Sample:
' CheckDirectoryCount( "localhost", "", "\\localhost\c$\windows\system32", True, 10000 )
Dim strAltLogin, strAltPassword
Dim n
CheckDirectoryCount = retvalUnknown ' Default return value, and will be shown as a yellow (uncertain) icon in the Manager
SYSDATA = "" ' SYSDATA displayed in the 'Data' column in the Manager
SYSEXPLANATION = "" ' SYSEXPLANATION displayed in the 'LastResponse' column in the Manager
strAltLogin = ""
strAltPassword = ""
' If alternate credentials are specified, retrieve the alternate login and password from the ActiveXperts global settings, and logon
If( strAltCredentials <> "" ) Then
If( Not getCredentials( strHost, strAltCredentials, strAltLogin, strAltPassword, SYSEXPLANATION )) Then
Exit Function
End If
If( Not netLogon( strHost, strAltLogin, strAltPassword, SYSEXPLANATION ) ) Then
Exit Function
End If
End If
n = cntFiles( strPath, bIncludeDirsInCount )
If( n >= 0 ) Then
SYSDATA = n
SYSEXPLANATION = "Number of files=[" & n & "], maximum allowed=[" & nMax & "]"
If( n > nMax ) Then
CheckDirectoryCount = False
Else
CheckDirectoryCount = True
End If
End If
' If alternate login is used, logoff now
If( strAltLogin <> "" ) Then
netLogoff( strHost )
End If
End Function
' //////////////////////////////////////////////////////////////////////////////
Function CheckDirectoryChange( strHost, strAltCredentials, strPath )
' Description:
' Check the directory for a change.
' If the size of the directory changes with 1KB or more, the directory has changed.
' Parameters:
' 1) strHost As String - Hostname or IP address of the computer you want to monitor
' 2) strAltCredentials As String - Specify an empty string to use Metwork Monitor service credentials.
' To use alternate credentials, enter a server that is defined in Server Credentials table.
' (To define Server Credentials, choose Tools->Options->Server Credentials)'
' 3) strPath As String - UNC formatted directory path
' Usage:
' CheckDirectoryChange( "<Server>, "<Empty String | Server>", "<\\Server\Share\Path>" )
' Sample:
' CheckDirectoryChange( "localhost", "\\localhost\admin$", "" )
Dim strAltLogin, strAltPassword
Dim strPrevSizeKB, strSizeKB
CheckDirectoryChange = retvalUnknown ' Default return value, and will be shown as a yellow (uncertain) icon in the Manager
SYSDATA = "" ' SYSDATA displayed in the 'Data' column in the Manager
SYSEXPLANATION = "" ' SYSEXPLANATION displayed in the 'LastResponse' column in the Manager
strAltLogin = ""
strAltPassword = ""
' If alternate credentials are specified, retrieve the alternate login and password from the ActiveXperts global settings, and logon
If( strAltCredentials <> "" ) Then
If( Not getCredentials( strHost, strAltCredentials, strAltLogin, strAltPassword, SYSEXPLANATION )) Then
Exit Function
End If
If( Not netLogon( strHost, strAltLogin, strAltPassword, SYSEXPLANATION ) ) Then
Exit Function
End If
End If
strSizeKB = "" & getFolderSizeKB( strPath )
If( strSizeKB = "-1" ) Then
CheckDirectoryChange = retvalUnknown
SYSDATA = ""
SYSEXPLANATION = "Directory does not exist"
Exit Function
End If
strPrevSizeKB = getCacheValue( extractPlainFile( strPath ) )
setCacheValue extractPlainFile( strPath ), strSizeKB
If( strPrevSizeKB = "" ) Then
CheckDirectoryChange = True
SYSDATA = ""
SYSEXPLANATION = "Directory was not monitored before"
Exit Function
End If
If( strPrevSizeKB <> strSizeKB ) Then
CheckDirectoryChange = False
SYSDATA = strSizeKB
SYSEXPLANATION = "Directory has changed since last check"
Else
CheckDirectoryChange = True
SYSDATA = strSizeKB
SYSEXPLANATION = "Directory has not changed since last check"
End If
If( strAltLogin <> "" ) Then
netLogoff( strHost )
End If
End Function
' //////////////////////////////////////////////////////////////////////////////
' // --- Private Functions section ---
' // Private functions names should start with a lower case character, so they
' // will not be listed in the Network Monitor's function browser.
' //////////////////////////////////////////////////////////////////////////////
Function netLogon( strHost, strAltLogin, strAltPassword, strSysExplanation )
Dim objRemoteServer
netLogon = False
strSysExplanation = ""
Set objRemoteServer = CreateObject( "ActiveXperts.RemoteServer" )
If( strAltLogin = "" ) Then
netLogon = True
Exit Function
End If
objRemoteServer.Connect strHost, strAltLogin, strAltPassword
If( objRemoteServer.LastError <> 0 ) Then
netLogon = False
strSysExplanation = "Login failed"
Exit Function
End If
netLogon = True
End Function
' //////////////////////////////////////////////////////////////////////////////
Function netLogoff( strHost )
Dim objRemoteServer
netLogoff = False
Set objRemoteServer = CreateObject( "ActiveXperts.RemoteServer" )
objRemoteServer.Disconnect strHost
If( objRemoteServer.LastError <> 0 ) Then
netLogoff = False
Exit Function
End If
netLogoff = True
End Function
' //////////////////////////////////////////////////////////////////////////////
Function getCredentials( strHost, strAltCredentials, BYREF strAltLogin, BYREF strAltPassword, BYREF strSysExplanation )
Dim objNMServerCredentials
strAltLogin = ""
strAltPassword = ""
strSysExplanation = ""
getCredentials = False
If( strAltCredentials = "" ) Then
' No alternate credentials specified, so login and password are empty and service credentials will be used
getCredentials = True
Exit Function
End If
Set objNMServerCredentials = CreateObject( "ActiveXperts.NMServerCredentials" )
strAltLogin = objNMServerCredentials.GetLogin( strAltCredentials )
strAltPassword = objNMServerCredentials.GetPassword( strAltCredentials )
If( strAltLogin = "" ) Then
getCredentials = False
strSysExplanation = "No alternate credentials defined for [" & strAltCredentials & "]. In the Manager application, select 'Options' from the 'Tools' menu and select the 'Server Credentials' tab to enter alternate credentials"
Exit Function
End If
getCredentials = True
End Function
' //////////////////////////////////////////////////////////////////////////////
Function getFileSizeKB( strPath )
' Description:
' Get the size of a file on a (remote) computer, in KB.
' Use network monitor service credentials to access the (remote) computer
' Parameters:
' 1) strPath - UNC formatted file path
Dim objFSO, objFile
getFileSizeKB = -1
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile( strPath )
On Error Goto 0
If( Err.Number <> 0 ) Then
getFileSizeKB = -1
Exit Function
End If
getFileSizeKB = FormatNumber( objFile.Size / 1024, 0, 0, 0, 0 )
End Function
' //////////////////////////////////////////////////////////////////////////////
Function getFolderSizeKB( strPath )
' Description:
' Get the size of a folderon a (remote) computer, in KB.
' Use network monitor service credentials to access the (remote) computer
' Parameters:
' 1) strPath - UNC formatted folder
Dim objFSO, objFolder
getFolderSizeKB = -1
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder( strPath )
On Error Goto 0
If( Err.Number <> 0 ) Then
getFolderSizeKB = -1
Exit Function
End If
getFolderSizeKB = FormatNumber( objFolder.Size / ( 1024 ), 0, 0, 0, 0 )
End Function
' //////////////////////////////////////////////////////////////////////////////
Function getFolderSizeMB( strPath )
' Description:
' Get the size of a folderon a (remote) computer, in MB.
' Use network monitor service credentials to access the (remote) computer
' Parameters:
' 1) strPath - UNC formatted folder
Dim objFSO, objFolder
getFolderSizeMB = -1
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder( strPath )
On Error Goto 0
If( Err.Number <> 0 ) Then
getFolderSizeMB = -1
Exit Function
End If
getFolderSizeMB = CInt( objFolder.Size / ( 1024 * 1024 ) )
End Function
' //////////////////////////////////////////////////////////////////////////////
Function getFileModDateString( strFile )
On Error Resume Next
Dim fso, fsoFile, dtModDate
getFileModDateString = ""
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsoFile = fso.GetFile( strFile )
dtModDate = fsoFile.DateLastModified
getFileModDateString = "" & dtModDate ' converts datetime format to string
On Error Goto 0
End Function
' //////////////////////////////////////////////////////////////////////////////
Function extractPlainFile( strFilepath )
Dim arr, i
On Error Resume Next
arr = Split( strFilepath, "\" )
extractPlainFile = arr( UBound( arr ) )
On Error Goto 0
End Function
' //////////////////////////////////////////////////////////////////////////////
Function getCacheValue( strEntry )
Dim WshShell
On Error Resume Next
getCacheValue = ""
Set WshShell = CreateObject("WScript.Shell")
getCacheValue = WshShell.RegRead("HKLM\Software\ActiveXperts\Network Monitor\Server\VBScript_Cache\" & strEntry )
On Error Goto 0
End Function
' //////////////////////////////////////////////////////////////////////////////
Sub setCacheValue( strEntry, strData )
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegWrite "HKLM\Software\ActiveXperts\Network Monitor\Server\VBScript_Cache\" & strEntry, strData, "REG_SZ"
End Sub
' //////////////////////////////////////////////////////////////////////////////
Function cntFiles( strFolder, bIncludeDirInCount )
Dim objFolder, objSubFolders, objFso, o, n
On Error Resume Next
cntFiles = -1
Set objFso = Createobject( "Scripting.FileSystemObject" )
Set objFolder = objFso.GetFolder(strFolder)
If( Err.Number <> 0 ) Then
Exit Function
End If
n = objFolder.files.count
Set objSubFolders = objFolder.SubFolders
For Each o In objSubFolders
n = n + cntFiles( o, bIncludeDirInCount )
If( bIncludeDirInCount ) Then
n = n + 1
End If
Next
On Error Goto 0
Set objSubFolders = Nothing
Set objFolder = Nothing
cntFiles = n
End Function
