如何编写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 '******************************************************************************

|