Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations TouchToneTommy on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

DiskSpace Monitoring Script

Status
Not open for further replies.

Markyb79

Technical User
May 11, 2016
2
GB
I have a really useful Script that will read from a list of Servers and provide the Disk Space utilization report,
The only issue is that if a Server is offline or not available it will list the previous servers results instead of an error or no value.

I could really use some help amending the script to reflect if a server is unavailable.


On Error Resume Next
Const ForAppending = 8
Const HARD_DISK = 3
Const ForReading = 1

'Declaring the variables
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set SrvList = objFSO.OpenTextFile("Server_List.txt", ForReading)
Set ReportFile = objFSO.OpenTextFile ("Diskspace_status.html", ForAppending, True)
i = 0

'Initializing the HTML Tags for better formatting
ReportFile.writeline("<html>")
ReportFile.writeline("<head>")
ReportFile.writeline("<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>")
ReportFile.writeline("<title>" & "EMEA Servers Disk Space Report</title>")
ReportFile.writeline("<style type='text/css'>")
ReportFile.writeline("<!--")
ReportFile.writeline("td {")
ReportFile.writeline("font-family: Tahoma;")
ReportFile.writeline("font-size: 11px;")
ReportFile.writeline("border-top: 1px solid #999999;")
ReportFile.writeline("border-right: 1px solid #999999;")
ReportFile.writeline("border-bottom: 1px solid #999999;")
ReportFile.writeline("border-left: 1px solid #999999;")
ReportFile.writeline("padding-top: 0px;")
ReportFile.writeline("padding-right: 0px;")
ReportFile.writeline("padding-bottom: 0px;")
ReportFile.writeline("padding-left: 0px;")
ReportFile.writeline("}")
ReportFile.writeline("body {")
ReportFile.writeline("margin-left: 5px;")
ReportFile.writeline("margin-top: 5px;")
ReportFile.writeline("margin-right: 0px;")
ReportFile.writeline("margin-bottom: 10px;")
ReportFile.writeline("")
ReportFile.writeline("table {")
ReportFile.writeline("border: thin solid #000000;")
ReportFile.writeline("}")
ReportFile.writeline("-->")
ReportFile.writeline("</style>")
ReportFile.writeline("</head>")
ReportFile.writeline("<body>")

ReportFile.writeline("<table width='50%'>")
ReportFile.writeline("<tr bgcolor='#CCCCCC'>")
ReportFile.writeline("<td colspan='7' height='25' align='center'>")
ReportFile.writeline("<font face='tahoma' color='#003399' size='2'><strong>EMEA Servers Disk Space Report</strong></font>")
ReportFile.writeline("</td>")
ReportFile.writeline("</tr>")
ReportFile.writeline("</table>")


'Declaring the Server Name for report generation
Do Until SrvList.AtEndOfStream
StrComputer = SrvList.Readline

ReportFile.writeline("<table width='50%'><tbody>")
ReportFile.writeline("<tr bgcolor='#CCCCCC'>")
ReportFile.writeline("<td width='50%' align='center' colSpan=6><font face='tahoma' color='#003399' size='2'><strong>" & StrComputer & "</strong></font></td>")
ReportFile.writeline("</tr>")


Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")

ReportFile.writeline("<tr bgcolor=#CCCCCC>")
ReportFile.writeline("<td width='05%' align='center'>Drive / Mount</td>")
ReportFile.writeline("<td width='05%' align='center'>Total Capacity (in GB)</td>")
ReportFile.writeline("<td width='05%' align='center'>Used Capacity (in GB)</td>")
ReportFile.writeline("<td width='05%' align='center'>Free Space (in GB)</td>")
ReportFile.writeline("<td width='05%' align='center'>Freespace %</td>")
ReportFile.writeline("</tr>")

'Starting the loop to gather values from all Hard Drives
For Each objDisk in colDisks

'Delcaring the Variables

TotSpace=Round(((objDisk.Size)/1073741824),2)
FrSpace=Round(objDisk.FreeSpace/1073741824,2)
FrPercent=Round((FrSpace / TotSpace)*100,0)
UsSpace=Round((TotSpace - FrSpace),2)
Drv=objDisk.DeviceID
VolName=objDisk.DeviceID

'Lnt=Len(VolName)

'If Len(VolName) = 3 then
If FrPercent > 10 Then
ReportFile.WriteLine "<tr><td align=center>" & Drv & "</td><td align=center>" & TotSpace & "</td><td align=center>" & UsSpace & "</td><td align=center>" & FrSpace & "</td><td BGCOLOR='#00FF00' align=center>" & FrPercent & "%" &"</td></tr>"
ElseIf FrPercent < 5 Then
ReportFile.WriteLine "<tr><td align=center>" & Drv & "</td><td align=center>" & TotSpace & "</td><td align=center>" & UsSpace & "</td><td align=center>" & FrSpace & "</td><td bgcolor='#ff00fb' align=center>" & FrPercent & "%" &"</td></tr>"
Else
ReportFile.WriteLine "<tr><td align=center>" & Drv & "</td><td align=center>" & TotSpace & "</td><td align=center>" & UsSpace & "</td><td align=center>" & FrSpace & "</td><td bgcolor='##00ffff' align=center>" & FrPercent & "%" &"</td></tr>"

End If
'Else
'End If

Next

ReportFile.writeline("<tr>")
ReportFile.writeline("<td width='50%' colSpan=6>&nbsp;</td>")
ReportFile.writeline("</tr>")

ReportFile.writeline("</tbody></table>")
Loop
ReportFile.WriteLine "</body></html>
 
On Error Resume Next suppresses runtime errors, which will cause unexpected results like you are seeing. First step is to remove that line at the top of the script so you can see which line is giving you a runtime error.

Now, to trap errors, every line that could come back with a runtime error should be surrounded with code like this or something similar:
Code:
On Error Resume Next [COLOR=#4E9A06]'suppress runtime errors temporarily[/color]
[i][b]Execute the line of code here[/b][/i]
If Err.Number <> 0 Then
   [COLOR=#4E9A06]'execute code to recover from the error[/color]
End If
On Error Goto 0 [COLOR=#4E9A06]'go back to stopping on a runtime error[/color]

Assuming the "Set objWMIService = etc" line is the one generating the runtime error if the server is offline, you could use something like this:

Code:
Do Until SrvList.AtEndOfStream
   ...
   On Error Resume Next 'suppress runtime errors
   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
   If Err.Number <> 0 Then [COLOR=#4E9A06]'if we got an error...[/color]
      On Error Goto 0 [COLOR=#4E9A06]'don't suppress runtime errors[/color]
   Else [COLOR=#4E9A06]'if no errors...[/color]
      On Error Goto 0 [COLOR=#4E9A06]'don't suppress runtime errors, and execute code for this server[/color]
      ...
      ...
      ...
   End If
Next

Also consider just pinging the server to see if it accessible:
faq329-6527
 
Thanks for your reply Gutiarzan, I am a little unsure how to put all of what you provided into the script.
Could you advise where I should enter the 2nd part of Code you provided.

I would like the output against the server name to say something like "unavailable" or "offline"
 
Something like this, not tested

Code:
Do Until SrvList.AtEndOfStream
   StrComputer = SrvList.Readline

   ReportFile.writeline("<table width='50%'><tbody>")
   ReportFile.writeline("<tr bgcolor='#CCCCCC'>")
   ReportFile.writeline("<td width='50%' align='center' colSpan=6><font face='tahoma' color='#003399' size='2'><strong>" & StrComputer & "</strong></font></td>")
   ReportFile.writeline("</tr>")

   [highlight #FCE94F]On Error Resume Next[/highlight]
   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
   [highlight #FCE94F]If Err.Number <> 0 Then[/highlight]
      [highlight #FCE94F]On Error Goto 0[/highlight]
      [highlight #F57900]ReportFile.writeline( ... code your "server offline" message ... )[/highlight]
   [highlight #FCE94F]Else[/highlight]
      [highlight #FCE94F]On Error Goto 0[/highlight]
      Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")

      ReportFile.writeline("<tr bgcolor=#CCCCCC>")
      ReportFile.writeline("<td width='05%' align='center'>Drive / Mount</td>")
      ReportFile.writeline("<td width='05%' align='center'>Total Capacity (in GB)</td>")
      ReportFile.writeline("<td width='05%' align='center'>Used Capacity (in GB)</td>")
      ReportFile.writeline("<td width='05%' align='center'>Free Space (in GB)</td>")
      ReportFile.writeline("<td width='05%' align='center'>Freespace %</td>")
      ReportFile.writeline("</tr>")

      'Starting the loop to gather values from all Hard Drives
      For Each objDisk in colDisks

         'Delcaring the Variables

         TotSpace=Round(((objDisk.Size)/1073741824),2)
         FrSpace=Round(objDisk.FreeSpace/1073741824,2)
         FrPercent=Round((FrSpace / TotSpace)*100,0)
         UsSpace=Round((TotSpace - FrSpace),2)
         Drv=objDisk.DeviceID
         VolName=objDisk.DeviceID

         'Lnt=Len(VolName)

         'If Len(VolName) = 3 then
         If FrPercent > 10 Then
            ReportFile.WriteLine "<tr><td align=center>" & Drv & "</td><td align=center>" & TotSpace & "</td><td align=center>" & UsSpace & "</td><td align=center>" & FrSpace & "</td><td BGCOLOR='#00FF00' align=center>" & FrPercent & "%" &"</td></tr>"
         ElseIf FrPercent < 5 Then
            ReportFile.WriteLine "<tr><td align=center>" & Drv & "</td><td align=center>" & TotSpace & "</td><td align=center>" & UsSpace & "</td><td align=center>" & FrSpace & "</td><td bgcolor='#ff00fb' align=center>" & FrPercent & "%" &"</td></tr>"
         Else
            ReportFile.WriteLine "<tr><td align=center>" & Drv & "</td><td align=center>" & TotSpace & "</td><td align=center>" & UsSpace & "</td><td align=center>" & FrSpace & "</td><td bgcolor='##00ffff' align=center>" & FrPercent & "%" &"</td></tr>"
      
         End If
         'Else
         'End If

      Next

   [highlight #FCE94F]End If[/highlight]


   ReportFile.writeline("<tr>")
   ReportFile.writeline("<td width='50%' colSpan=6>&nbsp;</td>")
   ReportFile.writeline("</tr>")

   ReportFile.writeline("</tbody></table>")

Loop
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top