Contact Info

Crumbtrail

ActiveXperts.com » Network Monitor » Scripts » Custom Script

file.vbs - vbscript script by ActiveXperts Software

file.vbs checks file existence, file content, last line of a file for a pattern, file size, file change.

Use file.vbs directly from ActiveXperts Network Monitor; in the Manager's 'Monitor' menu, select 'New Check (Script)' and select file.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.


file.vbs script code

' ///////////////////////////////////////////////////////////////////////////////
' // ActiveXperts Network Monitor  - VBScript based checks
' // For more information about ActiveXperts Network Monitor and VBScript, visit
' // http://www.activexperts.com/support/network-monitor/online/vbscript/
' ///////////////////////////////////////////////////////////////////////////////

Option Explicit

' Declaration of global variables
Dim   SYSDATA, SYSEXPLANATION   ' SYSDATA is displayed in the 'Data' column in the Manager; SYSEXPLANATION in the 'LastResponse' column

' Constants - return values
Const retvalUnknown = 1         ' ActiveXperts Network Monitor functions should always return True (-1, Success), False (0, Error) or retvalUnknown (1, Uncertain)


' // To test a function outside Network Monitor (e.g. using CSCRIPT from the
' // command line), remove the comment character (') in the following lines:
' Dim bResult
' bResult = CheckFileExistence( "localhost", "\\localhost\c$\windows\windowsupdate.log", "" )
' WScript.Echo "Return value: [" & bResult & "]"
' WScript.Echo "SYSDATA: [" & SYSDATA & "]"
' WScript.Echo "SYSEXPLANATION: [" & SYSEXPLANATION & "]"
' /////////////////////////////////////////////////////////////////////////////

Function CheckFileExistence( strHost, strAltCredentials, strPath )
' Description: 
'     Check the existence of a file
' Parameters:
'     1) strHost As String  - Hostname or IP address of the computer you want to monitor
'     2) strPath - UNC formatted file path
'     3) 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)
' Usage:
'     CheckFileExistence( "<Server>", "<Empty String | Server>", "<\\Server\Share\Path>" )
' Sample:
'     CheckFileExistence( "localhost", "", "\\localhost\c$\windows\windowsupdate.log" )

  Dim strAltLogin, strAltPassword
  Dim objFileSys, objFileStream, nLine, strLine

  CheckFileExistence  = 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      = ""
  nLine               = 0
  
  ' 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  

  Set objFileSys          = CreateObject("Scripting.FileSystemObject")

  If( objFileSys.FileExists( strPath ) <> True ) Then
    CheckFileExistence    = False
    SYSEXPLANATION        = "File [" & strPath & "] does not exist" 
  Else
    CheckFileExistence    = True
    SYSEXPLANATION        = "File [" & strPath & "] exists"  
  End If

  ' If alternate login is used, logoff now   
  If( strAltLogin <> "" ) Then
    netLogoff( strHost )
  End If

End Function


' /////////////////////////////////////////////////////////////////////////////

Function CheckFileContent( strHost, strAltCredentials, strPath, strPattern )
' Description: 
'     Check the contents of the file
' Parameters:
'     1) strHost As String  - Hostname or IP address of the computer you want to monitor
'     2) strPath - UNC formatted file path
'     3) 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)' Usage:
'     4) strPattern - Search for this pattern in the file
' Usage:
'     CheckFileContent( "<Server>", "<Empty String | Server>", "<\\Server\Share\Path>", "<pattern>" )
' Sample:
'     CheckFileContent( "localhost", "", "\\localhost\c$\windows\windowsupdate.log", "required" )

  Dim strAltLogin, strAltPassword
  Dim objFileSys, objFileStream, nLine, strLine

  CheckFileContent    = 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      = ""
  
  nLine               = 0

  ' 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  

  Set objFileSys    = CreateObject("Scripting.FileSystemObject")

  If( objFileSys.FileExists( strPath ) <> True ) Then
    CheckFileContent = retvalUnknown
    SYSEXPLANATION   = "File [" & strPath & "] does not exist" 
    Exit Function
  End If

  set objFileStream = objFileSys.OpenTextFile( strPath, 1, False )
  If( Err.Number <> 0 ) Then
    CheckFileContent = retvalUnknown
    SYSEXPLANATION   = "Unable to open file [" & strPath & "]" 
    Exit Function
  End If

  Do While objFileStream.AtEndOfStream <> True
    nLine = nLine + 1

    strLine = objFileStream.ReadLine()

    If( InStr( LCase( strLine ), LCase( strPattern ) ) ) Then
      CheckFileContent = True
      SYSEXPLANATION   = "Pattern [" & strPattern & "] matched in line #" & nLine

      Exit Function
    End If
  Loop

  CheckFileContent = False
  SYSEXPLANATION   = "Pattern [" & strPattern & "] not matched; #lines parsed:[" & nLine & "]"
  
  ' If alternate login is used, logoff now   
  If( strAltLogin <> "" ) Then
    netLogoff( strHost )
  End If
  
  objFileStream.Close()

End Function


' /////////////////////////////////////////////////////////////////////////////

Function CheckFileContentLastLine( strHost, strAltCredentials, strPath, strPattern )
' Description: 
'     Check last line of a file for a pattern
' Parameters:
'     1) strHost As String  - Hostname or IP address of the computer you want to monitor
'     2) strPath - UNC formatted file path
'     3) 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)' Usage:
'     4) strPattern - Search for this pattern in the last line of the file
' Usage:
'     CheckFileContentLastLine( "<Server>", "<Empty String | Server>", "<\\Server\Share\Path>", "<pattern>" )
' Sample:
'     CheckFileContentLastLine( "localhost", "", "\\localhost\c$\windows\windowsupdate.log", "client" )

  Dim strAltLogin, strAltPassword
  Dim objFileSys, objFileStream, nLine, strLastLine

  CheckFileContentLastLine   = 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             = ""
  
  nLine                      = 0
  strLastLine                = ""

  ' 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  

  Set objFileSys    = CreateObject("Scripting.FileSystemObject")

  If( objFileSys.FileExists( strPath ) <> True ) Then
    CheckFileContentLastLine = retvalUnknown
    SYSEXPLANATION           = "File [" & strPath & "] does not exist" 
  Else
    set objFileStream = objFileSys.OpenTextFile( strPath, 1, False )
    If( Err.Number <> 0 ) Then
      CheckFileContentLastLine = retvalUnknown
      SYSEXPLANATION           = "Unable to open file [" & strPath & "]" 
    Else

    Do While objFileStream.AtEndOfStream <> True
      nLine = nLine + 1
      strLastLine = objFileStream.ReadLine()
    Loop

    If( InStr( LCase( strLastLine ), LCase( strPattern ) ) ) Then
      CheckFileContentLastLine = True
      SYSEXPLANATION           = "Pattern [" & strPattern & "] matched in last line #" & nLine
    Else
      CheckFileContentLastLine = False
      SYSEXPLANATION           = "Pattern [" & strPattern & "] not matched in last line #" & nLine
      End If
    End If

  End If

  ' If alternate login is used, logoff now   
  If( strAltLogin <> "" ) Then
    netLogoff( strHost )
  End If

  objFileStream.Close()

End Function


' /////////////////////////////////////////////////////////////////////////////

Function CheckFileSize( strHost, strAltCredentials, strPath, strLimitKB )
' Description: 
'     Check the size of a file 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) strPath - UNC formatted file path
'     3) 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)' Usage:
'     4) strLimitKB As String - Maximum allowed file size (KB)
' Usage:
'     CheckFileSize( "<Server>", "<Empty String | Server>", "<\\Server\Share\Path>", <Max_KB> )
' Sample:
'     CheckFileSize( "localhost", "", "\\localhost\c$\program files\internet explorer\iexplore.exe", 900 )

  Dim strAltLogin, strAltPassword
  Dim nSizeKB, nDiffKB

  CheckFileSize      = 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  

  nSizeKB = getFileSizeKB( strPath )
  If( nSizeKB < 0 ) Then
    SYSEXPLANATION         = "Unable to retrieve file size. Make sure that the file exists and that Network Monitor can access it."
    CheckFileSize          = retvalUnknown 

  Else

    nDiffKB                = strLimitKB - nSizeKB
    SYSDATA                = nSizeKB
    SYSEXPLANATION         = "File size=[" & nSizeKB & " KB], maximum allowed size=[" & strLimitKB & " KB]"
    If( nDiffKB >= 0 ) Then
      CheckFileSize      = True
    Else
      CheckFileSize      = False
    End If
  End If

  ' If alternate login is used, logoff now   
  If( strAltLogin <> "" ) Then
    netLogoff( strHost )
  End If

End Function


' /////////////////////////////////////////////////////////////////////////////

Function CheckFileChange( strHost, strAltCredentials, strPath )
' Description: 
'     Check if a file has changed on a 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)' Usage:
'     3) strPath As String - UNC formatted file path
' Usage:
'     CheckFileChange( "<Server>", "<Empty String | Server>", "<\\Server\Share\Path>" )
' Sample:
'     CheckFileChange( "localhost", "", "\\localhost\c$\windows\windowsupdate.log" )


  Dim strAltLogin, strAltPassword
  Dim strPrevModDate, strModDate  

  CheckFileChange    = 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 

  strModDate                   = getFileModDateString( strPath )
  If( strModDate = "" ) Then
    CheckFileChange           = retvalUnknown  
    SYSDATA                   = ""
    SYSEXPLANATION            = "File does not exist or cannot be accessed"
    Exit Function
  End If    

  strPrevModDate               = getCacheValue( extractPlainFile( strPath ) )
  setCacheValue extractPlainFile( strPath ), strModDate
  If( strPrevModDate = "" ) Then
    CheckFileChange           = True  
    SYSDATA                   = ""
    SYSEXPLANATION            = "File was not monitored before"
    Exit Function
  End If


  If( strPrevModDate <> strModDate ) Then
    CheckFileChange           = False  
    SYSDATA                   = strModDate
    SYSEXPLANATION            = "File has changed since last check"
  Else
    CheckFileChange           = True  
    SYSDATA                   = strModDate
    SYSEXPLANATION            = "File has not changed since last check"
  End If

  ' If alternate login is used, logoff now   
  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 = "Unable to login on [" & strHost & "] using login [" & strAltLogin & "]"
    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

On Error Resume Next

  Dim objFSO, objFile

  getFileSizeKB              = -1

  Set objFSO                 = CreateObject("Scripting.FileSystemObject")
  Set objFile                = objFSO.GetFile( strPath )
  If( Err.Number <> 0 ) Then
      getFileSizeKB          = -1
      Exit Function
  End If

  getFileSizeKB              = CInt( objFile.Size / 1024 )
On Error Goto 0

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 )

On Error Resume Next

  Dim arr, i

  arr = Split( strFilepath, "\" )
  extractPlainFile = arr( UBound( arr ) )
    
On Error Goto 0
    
End Function

' //////////////////////////////////////////////////////////////////////////////

Function getCacheValue( strEntry )

On Error Resume Next

  Dim WshShell

  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

  Set objSubFolders = Nothing
  Set objFolder     = Nothing

  cntFiles = n
  
On Error Goto 0
  
  
End Function