troubleshooting Question

VBScript WMI old Values get reused

Avatar of David
David asked on
VB ScriptScripting LanguagesWindows Server 2003
4 Comments1 Solution460 ViewsLast Modified:
Dear All,

I am using a script to monitor our 2003 Server Disk Space and just stumbled over a bug.
I am pulling the Disk Space of each logical Drive via WMI which has been working fine, the issue is that if for what ever reason WMI dos not get a value, it reuses the previous received value.

For Example I have:
Server A:
Disk C 500GB and 200 free
Disk E 200GB and 50 free

Server B:
Is powered off

Server C:
Disk C 300GB and 200 free
Disk E 100GB and 50 free

My Result would be:
Server A:
Disk C 500GB and 200 free
Disk E 200GB and 50 free

Server B:
Disk C 500GB and 200 free (Value from Server A)
Disk E 200GB and 50 free (Value from Server A)

Server C:
Disk C 300GB and 200 free
Disk E 100GB and 50 free

How can I prevent theWMI object to use the old Values?
My code looks like this:

On Error Resume Next 
Const ForAppending = 2 
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 ("D:\WEB\DiskSpace.html", ForAppending, True) 
i = 0 
'Initializing the HTML Tags for better formatting 
ReportFile.writeline("<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>") 
ReportFile.writeline("<title>" & " Servers Disk Space Report "& Date & " , " & Time &"</title>") 
ReportFile.writeline("<style type='text/css'>") 
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("body {") 
ReportFile.writeline("margin-left: 5px;") 
ReportFile.writeline("margin-top: 5px;") 
ReportFile.writeline("margin-right: 0px;") 
ReportFile.writeline("margin-bottom: 10px;") 
ReportFile.writeline("table {") 
ReportFile.writeline("border: thin solid #000000;") 
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>Disk Space Report  "& Date & " , " & Time &"</strong></font>") 
'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>") 
    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>") 
        'Starting the loop to gather values from all Hard Drives 
        For Each objDisk in colDisks 
            'Delcaring the Variables

            FrPercent=Round((FrSpace / TotSpace)*100,0) 
            UsSpace=Round((TotSpace - FrSpace),2) 
            'If  Len(VolName) =  3 then 
                If FrPercent > 20 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 < 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='#FF0000' align=center>" & FrPercent & "%" &"</td></tr>" 
                    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='#FBB917' align=center>" & FrPercent & "%" &"</td></tr>" 
                End If 
            'End If 
    ReportFile.writeline("<td width='50%' colSpan=6>&nbsp;</td>") 
ReportFile.WriteLine "</body></html>"
Joe Howard

Our community of experts have been thoroughly vetted for their expertise and industry experience.

Join our community to see this answer!
Unlock 1 Answer and 4 Comments.
Start Free Trial
Learn from the best

Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.

Andrew Hancock - VMware vExpert
See if this solution works for you by signing up for a 7 day free trial.
Unlock 1 Answer and 4 Comments.
Try for 7 days

”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.

-Mike Kapnisakis, Warner Bros