如何编写WMI脚本,参看《WMI学习笔记》。
'******************************************************************************
' Script Name: Enum.vbs
'
' V1.0
' Get CPU,Memory,Disk information from remote server.
' Read server name from AD.
' Write performance data to console or a .csv file
'
' By Fog 2004-08-12
'******************************************************************************
Option Explicit
'On Error Resume Next
'******************************************************************************
' Const value
Const ERR_OK = 0
Const ERR_GENERAL_FAILURE = 1
' Help
Const L_Empty_Text = ""
' Disk info
Const HARD_DISK = 3
' Append file
Const ForAppending = 8
' Server OU
Const WEBSRV = "Computers of Web Service"
Const BAKSRV = "Computers of Backup Service"
Const DBWEBSRV = "Computers of Database Mix Web Service"
Const DBSRV = "Computers of Database Service"
Const MANSRV = "Computers of Manage Service"
Const SUSSRV = "Computers of SUS Service"
' Write codes
Const WRITE_CON = 0
Const WRITE_CSV = 1
Const WRITE_SQL = 2
'******************************************************************************
' Main block
'******************************************************************************
Dim intWriteOper, strSrvType, strExportInfo, arrDomainName
intWriteOper = WRITE_CSV
strDomainName = "wins.xinnet.com"
strExportInfo = "SrvType,SrvName,CPU1,CPU2,CPU3,CPU4,Memory(M),TotalMemory(M),Disk1(M),Disk2(M),Disk3(M),Disk4(M),Disk5(M),CheckTime" & vbcrlf
Call ExportInfo(strExportInfo)
strSrvType = WEBSRV
Call Enum()
strSrvType = BAKSRV
Call Enum()
strSrvType = DBWEBSRV
Call Enum()
strSrvType = DBSRV
Call Enum()
strSrvType = MANSRV
Call Enum()
strSrvType = SUSSRV
Call Enum()
'******************************************************************************
' End Of Main Block
'******************************************************************************
'******************************************************************************
' Enum server performance information
'******************************************************************************
Sub Enum()
Dim i, j, intCounter, strComputer, strDomainName, strObjName
Dim objConfiguration, objContainer, objWMIService, colItems, objItem
j = 0
' Get server name list from AD
strObjName ="LDAP://ou=" & strSrvType
arrDomainName = Split(strDomainName, ".")
For i = 0 To UBound(arrDomainName)
strObjName = strObjName & ",dc=" & arrDomainName(i)
Next
WScript.Echo strObjName
Set objConfiguration = GetObject (strObjName)
For Each objContainer in objConfiguration
strComputer = objContainer.Name
strComputer = Right(strComputer, Len(strComputer) - 3)
strExportInfo = Replace(strSrvType, "Computers of ", "") & ", " & strComputer
' Connect to server
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
' Memory/CPU/DiskFree
intCounter = 0
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",,48)
For Each objItem in colItems
strExportInfo = strExportInfo & ", " & objItem.LoadPercentage
If objItem.LoadPercentage >= 85 Then
Call Cdonts("[Alert]Server-" & strComputer & "'s CPU load is too high", "Server " & strComputer & " CPU(" & intCounter & ") load: " & objItem.LoadPercentage)
End If
intCounter = intCounter + 1
Next
For i = intCounter To 3
strExportInfo = strExportInfo & ", "
Next
Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfOS_Memory",,48)
For Each objItem in colItems
strExportInfo = strExportInfo & ", " & objItem.AvailableMBytes
Next
Set colItems = objWMIService.InstancesOf("Win32_LogicalMemoryConfiguration")
For Each objItem In colItems
i = CLng(objItem.TotalPhysicalMemory / 1024)
strExportInfo = strExportInfo & ", " & i
If i <= 85 Then
Call Cdonts("[Alert]Server-" & strComputer & "'s memory is too low", "Server " & strComputer & " available memory: " & i & "M.")
End If
Next
Set colItems = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
intCounter = 0
For Each objItem in colItems
i = CLng(objItem.FreeSpace / 1048576)
strExportInfo = strExportInfo & ", " & i
If i <= 1000 Then
Call Cdonts("[Alert]Server-" & strComputer & "'s Available Disk Space is too low", "Server " & strComputer & " Disk(" & intCounter & ") free space: " & i & "M.")
End If
intCounter = intCounter + 1
Next
For i = intCounter To 4
strExportInfo = strExportInfo & ", "
Next
strExportInfo = strExportInfo & ", '" & Now() & "'" & vbcrlf
Call ExportInfo(strExportInfo)
j = j + 1
Next
Wscript.Echo "Total " strSrvType & ": " & j
End Sub
'******************************************************************************
' End
'******************************************************************************
'******************************************************************************
' Export information
'******************************************************************************
Sub ExportInfo(strInfo)
Dim objFSO, objLogFile
Select Case intWriteOper
Case WRITE_CON
WScript.Echo strInfo
Case WRITE_CSV
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.OpenTextFile ("performance.csv", ForAppending, True)
objLogFile.Write strInfo
objLogFile.Close
Case WRITE_SQL
End Select
End Sub
'******************************************************************************
' End
'******************************************************************************
'******************************************************************************
' Send mail use CDONTS component
'******************************************************************************
Sub Cdonts(Topic,Mailbody)
'On Error Resume Next
Dim ObjCDOMail
Set ObjCDOMail = CreateObject("CDONTS.NewMail")
ObjCDOMail.From = ""
ObjCDOMail.To = ""
ObjCDOMail.Subject = Topic
ObjCDOMail.BodyFormat = 0
ObjCDOMail.MailFormat = 0
ObjCDOMail.Body = Mailbody
'ObjCDOMail.Send
Set ObjCDOMail = Nothing
End Sub
'******************************************************************************
' End
'******************************************************************************