Link to home
Start Free TrialLog in
Avatar of electricd7
electricd7

asked on

How can I get performance metrics similar to WMI on Windows 2000? I have a script that works in 2k3, but not 2000

Hello,

I am trying to report performance metrics to my OM database from my windows machines.  I have a script which was written for Windows Server 2003/08 which works beautifully, but relys on WbemScripting.Swbemrefresher to work, and that object is not available on Windows Server 2000.  Is there an easy change I can make to the attached script to make it work in Win2k?  The failing line is 25.  Thanks.

ED7
'Read GUID from supporting file
'dim filesys, readfile, contents
set filesys = CreateObject("Scripting.FileSystemObject")
set readfile = filesys.OpenTextFile("c:\om_guid.txt", 1, false)
GUID = readfile.ReadLine
readfile.close

'Setup Date / Time variable for om
NewDate = FormatDate(DatePart("yyyy",Date)  & "-" & DatePart("m",Date) & "-" & DatePart("d",Date) , Time)

Function FormatDate (dt,tm)
  TheDate = cDate(dt)
  TheTime = cDate(tm)
  TheDate = Year(dt) & "-" & Right("0" & Month(dt),2) & "-" & Right("0" & Day(dt), 2)
  TheTime = Right("0" & Hour(tm),2) & ":" & Right("0" & Minute (tm), 2) & ":" & Right("0" & Second(tm), 2)
  FormatDate = TheDate & " " & TheTime
End Function

'Open winmgmt service and setup Refresher and device objects
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objMemory = objRefresher.AddEnum _
  (objWMIService, "Win32_PerfFormattedData_PerfOS_Memory").objectSet
Set colDiskDrives = objWMIService.ExecQuery _
    ("Select * from Win32_PerfFormattedData_PerfDisk_LogicalDisk where " _
        & "Name <> '_Total'")
Set objProcessor = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").objectSet

Set colNICs = objRefresher.AddEnum _
    (objWMIService, "Win32_PerfFormattedData_TCPIP_NetworkInterface"). objectSet

Set colComputerSystem = objWMIService.ExecQuery _ 
	("Select * From Win32_ComputerSystem")

objRefresher.Refresh

'Get values for each object and report to OM

'Computer Name
For Each objItem in colComputerSystem
    Machine_Name = objItem.Name
Next

'Available Memory
i=0
Dim symAvailMem(), meaAvailMem()
For each intAvailableBytes in objMemory
  ReDim Preserve symAvailMem(i), meaAvailMem(i)
  symAvailMem(i) = "Available_Memory"
  meaAvailMem(i) = Int(intAvailableBytes.AvailableMBytes)
  'Wscript.Echo symAvailMem(i)&": "& meaAvailMem(i) &"MB"
  i=i+1
Next

'Disk Free Space
i=0
Dim symDiskName(), meaDiskName()
For Each objDiskDrive in colDiskDrives
	ReDim Preserve symDiskName(i), meaDiskName(i)
	symDiskName(i) = objDiskDrive.Name
	meaDiskName(i) = objDiskDrive.FreeMegabytes
	'Wscript.Echo symDiskName(i) &" "& meaDiskName(i) &"MB Free"
	i=i+1
Next

'Network Traffic
i=0
Dim symNIC(), meaNIC()
For Each objItem in colNICs
	ReDim Preserve symNIC(i), meaNIC(i)
	symNIC(i) = objItem.Name
	meaNIC(i) = objItem.BytesTotalPerSec
	'Wscript.Echo symNIC(i) & ": " & meaNIC(i) &" Bps"
	i=i+1
Next 


'Processor Utilization
count = 0
For i = 1 to 10
	For each intProcessorUse in objProcessor
		count = count + 1
		ttlProcessorUse = Int(ttlProcessorUse) + Int(intProcessorUse.PercentProcessorTime)
	Next
	Wscript.Sleep 1000
	objRefresher.Refresh
Next

symProcessor = "Average_Processor_Use"
meaProcessor = Round(ttlProcessorUse/count,2)
'Wscript.Echo "Average Processor Use: " & Round(ttlProcessorUse/count,2) & "%"

'Setup OM reporting address
om_addr = "http://10.1.11.12/sample.asp?device_name="&Machine_Name&"&globalid="&GUID&"&collection_date="&NewDate

For i = 0 To UBound(symAvailMem)
	om_addr = om_addr & "&"&symAvailMem(i)&"="&meaAvailMem(i)
Next

For i = 0 To UBound(symDiskName)
	om_addr = om_addr & "&"&Replace(symDiskName(i)," ","_")&"="&meaDiskName(i)
Next

For i = 0 To UBound(symNIC)
	om_addr = om_addr & "&"&Replace(symNIC(i)," ","_")&"="&meaNIC(i)
Next

om_addr = om_addr & "&"&symProcessor&"="&meaProcessor



'Write om_addr for debugging purposes

if 0=1 then
	Dim objFSO, objFolder, objShell, objFile
	Dim strDirectory, strFile
	strDirectory = "c:\logs"
	strFile = "\om_log.txt"

	' Create the File System Object
	Set objFSO = CreateObject("Scripting.FileSystemObject")

	' Check that the strDirectory folder exists
	If objFSO.FolderExists(strDirectory) Then
	   Set objFolder = objFSO.GetFolder(strDirectory)
	Else
	Set objFolder = objFSO.CreateFolder(strDirectory)
	End If

	If objFSO.FileExists(strDirectory & strFile) Then
	Set objFolder = objFSO.GetFolder(strDirectory)
	Else
	Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
	End If 

	Set objTextStream = objFSO.OpenTextFile(strDirectory & strFile, ForAppending)
	objTextStream.WriteLine om_addr
	objTextStream.Close
	Set objTextStream = Nothing
	set objFolder = nothing
	set objFile = nothing

end if
 




'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'	Execute wget of om_addr address
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", om_addr, false
objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
 'Get call was successful
 wscript.echo "Success"
Else
 wscript.echo "Failed to get " & om_addr&"  Error was "& objXMLHTTP.Status
 'Get call failed
End if
Set objXMLHTTP = Nothing

Open in new window

Avatar of electricd7
electricd7

ASKER

OK so it seems I should be able to use Win32_PerfRawData instead of Win32_PerfFormattedData for windows 2000 machines.  I am not sure however, how I would query those because in those cases above I use objRefresher (WbemScripting.Swbemrefresher) to query them, and that is not available in Windows 2000.  Can anyone help?
Avatar of RobSampson
Hi, instead of using the Refresher object, just put your WMI queries inside the For i = 1 to 10 loop, and execute them there 10 times.

Regards,

Rob.
Can you perhaps post an example?  I am not sure how to change my queries to accommodate that difference?
ASKER CERTIFIED SOLUTION
Avatar of RobSampson
RobSampson
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Invalid to use Round at line 93,1 error