Dim oAPI, oDiscoveryData, oInst, strComputer, LogMessage, objConnection, wbemObjectSet, objItemBIOS
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
strComputer = TargetComputer
Set objConnection = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
If Err.Number <> 0 Then
LogMessage = "WMI Cimv2Dell Error Number : " & Err.Number & ". Description :" & Err.Description
Err.Clear
Else
If IsEmpty(objConnection) Then
LogMessage = "Unable to open WMI Namespace root-cimv2. Check to see if the WMI service is enabled and running " & Err
Else
'Retrieving the BIOS Information
Set wbemObjectSet = GetObjectSet(objConnection, "Select * from Win32_BIOS", "Manufacturer", "Win32_BIOS")
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
If (wbemObjectSet is Nothing) Or (isNull(wbemObjectSet)) Then
LogMessage = "Unable to retrieve BIOS information"
Else
LogMessage = "BIOS Information retrieved successfully"
For Each objItemBIOS in wbemObjectSet
'Error checking
If Err.Number <> 0 Then
LogMessage = "Number:" & Err.Number & "Description:" & Err.Description
End If
'Object Retrieval
If not objItemBIOS is nothing Then
Dim biosManufacturer : biosManufacturer = trim(objItemBIOS.Manufacturer)
' DF398649 - BIOS manufacturer is Dell Computer Corporation
' It should be Dell Inc.
Select Case biosManufacturer
Case "Dell Computer Corporation": biosManufacturer = "Dell Inc."
Case "": biosManufacturer = "Not Available"
Case Null: biosManufacturer = "Not Available"
End Select
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.BIOS']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", objItemBIOS.SerialNumber)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/Version$", objItemBIOS.SMBIOSBIOSVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/Manufacturer$", biosManufacturer)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/Name$", objItemBIOS.Name)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/SerialNumber$", objItemBIOS.SerialNumber)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/SMBIOSBIOSVersion$", objItemBIOS.SMBIOSMajorVersion & "." & objItemBIOS.SMBIOSMinorVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/SMBIOSMajorVersion$", objItemBIOS.SMBIOSMajorVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/SMBIOSMinorVersion$", objItemBIOS.SMBIOSMinorVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/SMBIOSPresent$", objItemBIOS.SMBIOSPresent)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/PrimaryBIOS$", objItemBIOS.PrimaryBIOS)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.BIOS']/CurrentLanguage$", objItemBIOS.CurrentLanguage)
call oDiscoveryData.AddInstance(oInst)
End If
Next
End If
Set wbemObjectSet = Nothing
End If
End If
' Submit the data
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
Set objConnection = Nothing
' *** Add double query fix
' Function to retrieve the object
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 </Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>