VB Script to check disk space and email results

By Burnsie • Nov 28th, 2007 • Category: Windows 2K3 Server

Here is a script I hacked together that checks disk space of your servers and emails it to an address. This can be scheduled using Windows Task Scheduler.

Requirements:
- CDONTS - http://kb.swsoft.com/en/560
- Needs to be run under administrative rights

‘ Sample code for monitoring windows disk space

‘ This script reports the drive usage of all fixed drives on the systems
‘ specified. The report will be sent via plain text email to a specified
‘ recipient address (see last line in file).

‘ This sample can be used in a production environment to set up an
‘ unattended disk utilization report system.

‘ Modified from the original by Adiscon at http://www.adiscon.com/

‘ Modified by Burnsie

‘ 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.mydomain.com” ‘ 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 = “Server1″
Set objWMIService = GetObject(”winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2″)

Set colDisks = objWMIService.ExecQuery _
(”Select * from Win32_LogicalDisk Where DriveType = ” & HARD_DISK & “”)

str = str & “Server: ” & strComputer & vbcrlf
For Each objDisk in colDisks
str = str & “Disk: “& objDisk.DeviceID & vbTab
str = str & ” Free Disk Space: “& FormatNumber(CLng(objDisk.FreeSpace / 1024 / 1024),0,,,-1) & ” MB” & vbcrlf
Next

str = str & vbcrlf

‘=============================================================
‘ Server server2
‘============================================================
strComputer = “server2″
Set objWMIService = GetObject(”winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2″)

Set colDisks = objWMIService.ExecQuery _
(”Select * from Win32_LogicalDisk Where DriveType = ” & HARD_DISK & “”)

str = str & “Server: ” & strComputer & vbcrlf
For Each objDisk in colDisks
str = str & “Disk: “& objDisk.DeviceID & vbTab
str = str & ” Free Disk Space: “& FormatNumber(CLng(objDisk.FreeSpace / 1024 / 1024),0,,,-1) & ” MB” & vbcrlf
Next

str = str & vbcrlf

‘================================================================
‘ Server server3
‘================================================================
strComputer = “server3″
Set objWMIService = GetObject(”winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2″)

Set colDisks = objWMIService.ExecQuery _
(”Select * from Win32_LogicalDisk Where DriveType = ” & HARD_DISK & “”)

str = str & “Server: ” & strComputer & vbcrlf
For Each objDisk in colDisks
str = str & “Disk: “& objDisk.DeviceID & vbTab
str = str & ” Free Disk Space: “& FormatNumber(CLng(objDisk.FreeSpace / 1024 / 1024),0,,,-1) & ” MB” & vbcrlf
Next

str = str & vbcrlf

‘============================================================
‘ Server server4
‘============================================================
strComputer = “server4″
Set objWMIService = GetObject(”winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2″)

Set colDisks = objWMIService.ExecQuery _
(”Select * from Win32_LogicalDisk Where DriveType = ” & HARD_DISK & “”)

str = str & “Server: ” & strComputer & vbcrlf
For Each objDisk in colDisks
str = str & “Disk: “& objDisk.DeviceID & vbTab
str = str & ” Free Disk Space: “& FormatNumber(CLng(objDisk.FreeSpace / 1024 / 1024),0,,,-1) & ” MB” & vbcrlf
Next

str = str & vbcrlf & vbcrlf & “Disk Space script hacked together by Burnsie and his good friend Google”

‘Send the email
SendMail “administrator@mydomain.com.au”, “support@mydomain.com.au”, “Client Name ” & strComputerName & “: Drive Space Report”, str

This code sends an email to the specified address that looks like this:

SUBJECT:Client Name: Drive Space Report
BODY:
Server: server11
Disk: C: Free Disk Space: 10,219 MB
Disk: D: Free Disk Space: 39,387 MB

Server: server2
Disk: C: Free Disk Space: 1,920 MB
Disk: D: Free Disk Space: 9,875 MB
Disk: F: Free Disk Space: 17,207 MB
Disk: M: Free Disk Space: 9,875 MB

Server: server3
Disk: C: Free Disk Space: 8,857 MB
Disk: D: Free Disk Space: 6,320 MB
Disk: E: Free Disk Space: 28,497 MB
Disk: F: Free Disk Space: 16,437 MB

Server: server4
Disk: C: Free Disk Space: 35,073 MB
Disk: E: Free Disk Space: 731 MB

Disk Space script hacked together by Burnsie and his good friend Google

Related posts:

  1. Script to check if a windows service is running, and email a user if it is not


FREE NEWSLETTER -> Want Tech Tips Sent Straight to your Inbox?

Grab our Newsletter to Ensure your PC is Running Smooth!

Burnsie is currently working as a Wintel Messaging Engineer for a large commercial bank specialising in Microsoft Exchange and Blackberry administration for 1000+ users.
Email this author | All posts by Burnsie

One Response »

  1. Impressive Burnsie! :)

Leave a Reply