Contact Info

Crumbtrail

ActiveXperts.com » Network Monitor » Scripts » Custom Script

diskspace.vbs - vbscript script by ActiveXperts Software

diskspace.vbs checks whether a disk has sufficient space.

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


diskspace.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 = CheckDiskFreeSpace( "localhost", "", "C", 10000 )
' WScript.Echo "Return value: [" & bResult & "]"
' WScript.Echo "SYSDATA: [" & SYSDATA & "]"
' WScript.Echo "SYSEXPLANATION: [" & SYSEXPLANATION & "]"


Function CheckDiskFreeSpace( strHost, strAltCredentials, strDriveLetter, nRequiredSpaceGB )
' Description: 
'   This function checks if a disk has enough space left.
' 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 Network 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) strDriveLetter As String - The driveletter of the disk you want to check.
'   4) nRequiredSpaceGB As Int - The freespace (GB) required on the Disk
' Usage:
'   CheckDiskFreeSpace( "<Hostname | IP>", "<Empty String | Server>", "<DriveLetter>", <RequiredSpaceGB> )
' Sample:
'   CheckDiskFreeSpace( "localhost", "",  "C", 10 )

  Dim strAltLogin, strAltPassword
  Dim objWMIService

  CheckDiskFreeSpace   = 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
  If( strAltCredentials <> "" ) Then	
    If( Not getCredentials( strHost, strAltCredentials, strAltLogin, strAltPassword, SYSEXPLANATION )) Then
      Exit Function
    End If
  End If  

  ' WMI Connect
  If( Not wmiConnect( strHost, strAltLogin, strAltPassword, objWMIService, SYSEXPLANATION ) ) Then
    Exit Function
  End If
  
  ' Only 1 letter driveletter is specified, add : begind the drive letter.
  If( Len(strDriveLetter) = 1) Then
    strDriveLetter = strDriveLetter & ":"
  End If
  CheckDiskFreeSpace =  checkDiskFreeSpaceWMI( objWMIService, strHost, strDriveLetter, nRequiredSpaceGB, SYSEXPLANATION, SYSDATA )
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 checkDiskFreeSpaceWMI( objWMIService, strHost, strDriveLetter, nRequiredSpaceGB, BYREF strSysExplanation, BYREF strSysData)
	Dim colDisks, objDisk, nSpaceGB
	checkDiskFreeSpaceWMI = retvalUnknown ' Default return value
	
On Error Resume Next
	Set colDisks = objWMIService.ExecQuery( "Select * FROM Win32_PerfFormattedData_PerfDisk_LogicalDisk")
  If( Err.Number <> 0 ) Then
    strSysData         = ""
    strSysExplanation  = "Unable to query WMI class on computer [" & strHost & "]" & Err.Number
    Exit Function
  End If
  If( colDisks.Count <= 0  ) Then
    strSysData         = ""
    strSysExplanation  = "No disks on computer [" & strHost & "]"
    Exit Function
  End If
    
On Error Goto 0

  For Each objDisk in colDisks   
    If( Err.Number <> 0 ) Then
      checkDiskFreeSpaceWMI    = False
      strSysExplanation        = "Unable to list disks on computer [" & strHost & "]"
      Exit Function
    End If

    If (LCase(objDisk.Name) = LCase(strDriveLetter)) Then
      ' Disk Point found
      nSpaceGB = Round( objDisk.FreeMegabytes / 1024 )
      If( nRequiredSpaceGB <= nSpaceGB ) Then
        checkDiskFreeSpaceWMI = True                
      Else
        checkDiskFreeSpaceWMI = False
      End If
      strSysData = nSpaceGB
      strSysExplanation = "Disk [" & strDriveLetter & "] has [" & nSpaceGB & " GB] free space, [" & nRequiredSpaceGB & " GB] is required on [" & strHost & "]"
      Exit Function
    End If
  Next    
    
    strSysExplanation = "Disk [" & strDriveLetter & "] was not found on [" & strHost & "]"
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 wmiConnect( strHost, strAltLogin, strAltPassword, BYREF objWMIService, BYREF strSysExplanation )	

  Dim objSWbemLocator, colItems
  Dim bConnectResult

  wmiConnect         = False
  Set objWMIService  = Nothing
      
  If( strAltLogin = "" ) Then	
    ' Connect to remote host on same domain using same security context
On Error Resume Next    
    Set objWMIService     = GetObject( "winmgmts:{impersonationLevel=Impersonate}!\\" & strHost &"\root\cimv2" )
    If( Err.Number <> 0 ) Then
      bConnectResult = False
    Else
      bConnectResult = True
    End If
On Error Goto 0    
    
  Else
    ' Connect to remote host using different security context and/or different domain 
On Error Resume Next        
    Set objSWbemLocator   = CreateObject( "WbemScripting.SWbemLocator" )
    Set objWMIService     = objSWbemLocator.ConnectServer( strHost, "root\cimv2", strAltLogin, strAltPassword )

    If( Err.Number <> 0 ) Then
      bConnectResult = False
    Else
      bConnectResult = True
    End If

    objWMIService.Security_.ImpersonationLevel = 3
On Error Goto 0    
    
  End If

  If( Not bConnectResult ) Then
    Set objWMIService  = Nothing
    wmiConnect         = False
    strSysExplanation  = "Unable to connect to [" & strHost & "]. Possible reasons: no WMI installed on the remote server, firewall blocking WMI calls, login failure, or remote server down"
    Exit Function
  End If    
  
  wmiConnect = True 
End Function