04 January 2011

Unattended drive space monitoring

'Constants for drive types
Const Unknown = 0
Const Removable = 1
Const Fixed = 2
Const Remote = 3
Const CDROM = 4
Const RAMDisk = 5

'general constants – NEED TO BE MODIFIED FOR YOUR ENVIRONMENT
Const MailServer = "SMTP SERVER NAME" ' Mail Server to use (SMTP)
Const MailServerPort = "25" ' SMTP Port used at Mail server (25 is default)

Const LOCAL_HARD_DISK = 3

'Send a mail message
Sub SendMail(Sender, Recipient, Subject, Message)
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = Subject
objMessage.From = Sender
objMessage.To = Recipient
objMessage.TextBody = Message

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = MailServer

'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = MailServerPort

objMessage.Configuration.Fields.Update

objMessage.Send
End Sub

' get current computer name (from system environment variables)
Function GetCurrentComputerName
set oWsh = WScript.CreateObject("WScript.Shell")
set oWshSysEnv = oWsh.Environment("PROCESS")
GetCurrentComputerName = oWshSysEnv("COMPUTERNAME")
End Function

'============================================
' Begin main code
'============================================
str = ""

'Only enumerate physical disks (Not Network Drives)
Const HARD_DISK = 3

'============================================
' Server Server1
'============================================
strComputer = "MACHINE_NAME"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colDisks = objWMIService.ExecQuery _
("Select * from Win32_LogicalDisk Where DeviceID = 'C:' ")
'For all disks
'("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & " ")

str = str & "Server: " & strComputer & vbcrlf & vbcrlf
For Each objDisk in colDisks
str = str & "Disk: "& objDisk.DeviceID & vbTab & vbcrlf
str = str & " Total Space    : "& FormatNumber(CLng(objDisk.size / 1024 / 1024),0,,,-1) & " MB" & vbcrlf
str = str & " Free Space     : "& FormatNumber(CLng(objDisk.FreeSpace / 1024 / 1024),0,,,-1) & " MB" & vbcrlf
str = str & " Percentage Free: "& Round(((FormatNumber(CLng(objDisk.Freespace / 1024 / 1024),0,,,-1) / FormatNumber(CLng(objDisk.size / 1024 / 1024),0,,,-1)) * 100),2) & "%" &vbcrlf
str1 = Round(((FormatNumber(CLng(objDisk.Freespace / 1024 / 1024),0,,,-1) / FormatNumber(CLng(objDisk.size / 1024 / 1024),0,,,-1)) * 100),2)
Next

str = str & vbcrlf & "Please analyse" & vbcrlf & "Thank you" & vbcrlf & vbcrlf & "VbScript by Syed Sameer Abbas"

If  str1 < 25 then
'Send the email
SendMail "email@domain.com", "email@domain.com", "MACHINE_NAME" & strComputerName & ": C Drive is below 25% Of free Space", str
else
end if

No comments: