Dim oAPI, oDiscoveryData, oInst, strComputer, objDellConnection
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, sourceId, managedEntityId)
strComputer = targetComputer
set objDellConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2\Dell")
If IsEmpty(objDellConnection) Or (Err.Number <> 0) Then
Else
DiscoverPSUnit()
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Set objDellConnection = Nothing
'*************************************************************************
' Function : DiscoverPSUnit()
' Desc : To discover Powersupply instances using CIM
' Arguments : NA
'*************************************************************************
Function DiscoverPSUnit()
'Retrieving PS Units
On Error resume next
Dim sQuery, colItems, objItemPS, totalOutputPower
sQuery = "Select * from CIM_PowerSupply"
Set colItems = GetObjectSet(objDellConnection, sQuery, "Name", "CIM_PowerSupply")
If Err.Number <> 0 Then
logMessage = sQuery & " Error Number:" & Err.Number & "Description:" & Err.Description
If Err.Number = -2147023169 Then
logMessage = "RPC Failure occurred for namespace root-cimv2-dell"
End If
Err.Clear
End If
If (colItems is Nothing) or (IsNull(colItems)) Then
logMessage = "Unable to retrieve PS Unit"
Else
logMessage = "PS Unit query retrieved successfully"
For Each objItemPS in colItems
'Error checking
If Err.Number <> 0 Then
logMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItemPS is nothing Then
totalOutputPower = objItemPS.TotalOutputPower
If (totalOutputPower <= 0) Then
totalOutputPower = "N/A"
Else
totalOutputPower = totalOutputPower/10
End If
Function GetObjectSet(ByRef objDellConnection, SelectQuery, Attribute, objName)
Dim retry, retryFlag
Dim objItem, arrURL, logMessage
On Error Resume Next
RetryFlag = False
For retry = 0 To 1
MOMDebugLog 1, "Retrying for " & retry & " time..."
Set GetObjectSet = objDellConnection.ExecQuery(SelectQuery)
LogErrorNumber(objName)
If (GetObjectSet is Nothing) Or (IsNull(GetObjectSet)) Then
logMessage = "INFO: Unable to retrieve " & objName & " Attributes"
MOMDebugLog 1, logMessage
WScript.Sleep(1000)
RetryFlag = True
Else
logMessage= "INFO: " & objName & " attributes retrieved successfully"
MOMDebugLog 1, logMessage
If Attribute = "__COUNT__" Then
Exit For
End If
For Each objItem in GetObjectSet
If LogErrorNumber(objName) = 0 Then
If Not objItem is nothing Then
Dim attrVal : attrVal = objItem.Properties_.Item(Attribute)
If IsNull(attrVal) Or Len(attrVal) <= 0 Then
MOMDebugLog 1, Attribute & " value is null or empty"
RetryFlag = True
WScript.Sleep(500)
Exit For
Else
Exit Function
End If
End If
End If
Next
If RetryFlag = False Then
Exit For
End If
End If
Next
End Function
Function LogErrorNumber(objName)
Dim logMessage
LogErrorNumber = Err.Number
If Err.Number <> 0 Then
Select Case Err.Number
Case -2147749904
logMessage = "CIM Object not found"
Case -2147749902
logMessage = "Dell CIM object not found"
Case -2147023169
logMessage = "RPC Failure occurred for namespace root-cimv2-dell"
Case -2147217389
logMessage = "Please Install/Re-Install ServerAdministrator on Dell Server!"
Case -2147217394 '0x8004100E
logMessage = "Not able to find Dell CIM object"
Case -2147217392 '0x8004100C
logMessage = "Not able to find the collection"
Case -2147749890
logMessage = "Object cannot be found"
Case -2147749892
logMessage = "Object cannot be found"
Case Else
logMessage = "Unable to retrieve " & objName
logMessage = logMessage & " Err Number:" & Err.Number
logMessage = logMessage & " Err Descr:" & Err.Description
End Select
MOMDebugLog 1, "ERROR: " & logMessage
End If
End Function
'*** Add MOMDebug
Const DEBUG_LOG_FILENAME = "DellWinServerDetailedPSDiscovery.log"
Dim loginited: loginited = False
Dim objLogTextFile, objLogFSO
Sub InitLog(strFileName)
' Begin Logheader
If logLevel <> 0 And loginited = False Then
Dim fileSize, strOutFile
Const ForAppending = 8
Const ForWriting = 2
Const MaxFileSize = 524288 'File Size is limited to 512 KB
dim wsShell : Set wsShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wsShell.Environment
dim tFolder : tFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wsShell.Environment("Process")
tFolder = Replace(tFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
Set objLogFSO = CreateObject("Scripting.FileSystemObject")
If Not objLogFSO.FolderExists(tFolder) Then
objLogFSO.CreateFolder(tFolder)
End If
strOutFile = tFolder & "\"& strFileName
WScript.Echo strOutFile
If Not objLogFSO.FileExists(strOutFile) Then
Set objLogTextFile = objLogFSO.CreateTextFile(strOutFile)
objLogTextFile.Close()
End If
fileSize = objLogFSO.GetFile(strOutFile).Size
If (fileSize > MaxFileSize) Then
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForWriting, True)
Else
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForAppending, True)
End If
loginited = True
MOMDebugLog 1, "------------------------------------------------------"
MOMDebugLog 1, "INFO: Script - " & strFileName & ": Start()"
Err.Clear
End If
End Sub
Sub MOMDebugLog (ByVal debugLevel, ByVal Message)
'On Error Resume Next
If (debugLevel > 0) and (debugLevel <= logLevel) Then
If loginited = False Then
InitLog DEBUG_LOG_FILENAME
End If
objLogTextFile.WriteLine(Now() & " ---- " & Message)
Err.Clear
End If
End Sub
Sub CloseLog
' Begin Logheader
If loginited = True Then
objLogTextFile.Close
End If
End Sub