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 = MessageobjMessage.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”) = MailServerPortobjMessage.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
Nextstr = 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
Nextstr = 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
Nextstr = 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
Nextstr = 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 MBServer: 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 MBServer: 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 MBServer: server4
Disk: C: Free Disk Space: 35,073 MB
Disk: E: Free Disk Space: 731 MBDisk Space script hacked together by Burnsie and his good friend Google
No related posts.
Impressive Burnsie!
Super script. Thanks very much!
Very nice script, thanks for sharing
How can this accommodate a list of servers from a text file instead so it can read that file and work the list, instead of copying and pasting the same commands for every server?
Understand that for 3 or 4 servers it might be sufficient, but when they get in the dozens or hundreds or systems, it will be a long script.
You can’t be serious…
As per Hap Cluff comments, I work in an environment containing over 200 servers that include additions and decomms constantly, this script is seriously lacking…