Dell Server Discovery Module

Dell.WindowsServer.Server.DiscoveryRule (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Interval SecondsInterval in Seconds for the Discovery Cycle
MinOMSAVersionstring$Config/MinOMSAVersion$Minimum OMSA VersionMinimum OMSA Version
DiscoverRACURLbool$Config/DiscoverRACURL$Discover RAC URL FlagDiscover RAC URL Flag
LogLevelint$Config/LogLevel$Log LevelLog Level
DoDiscoverybool$Config/DoDiscovery$Do DiscoveryFlag to set the Server Agent-based discovery

Source Code:

<DataSourceModuleType ID="Dell.WindowsServer.Server.DiscoveryRule" Accessibility="Internal">
<Configuration>
<xsd:element name="IntervalSeconds" type="xsd:integer"/>
<xsd:element name="Computer" type="xsd:string"/>
<xsd:element name="MinOMSAVersion" type="xsd:string"/>
<xsd:element name="DiscoverRACURL" type="xsd:boolean"/>
<xsd:element name="LogLevel" type="xsd:integer"/>
<xsd:element name="DoDiscovery" type="xsd:boolean"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" ParameterType="int" Selector="$Config/IntervalSeconds$"/>
<OverrideableParameter ID="MinOMSAVersion" ParameterType="string" Selector="$Config/MinOMSAVersion$"/>
<OverrideableParameter ID="DiscoverRACURL" ParameterType="bool" Selector="$Config/DiscoverRACURL$"/>
<OverrideableParameter ID="LogLevel" ParameterType="int" Selector="$Config/LogLevel$"/>
<OverrideableParameter ID="DoDiscovery" Selector="$Config/DoDiscovery$" ParameterType="bool"/>
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime/>
<ScriptName>DellServerDiscovery.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Config/Computer$ $Config/MinOMSAVersion$ $Config/DiscoverRACURL$ $Config/LogLevel$ $Config/DoDiscovery$</Arguments>
<ScriptBody><Script>
'**********************************************************************************
' Script Name - Dell Server Discovery
' Author: Muralidhar L, Vignesh Pandian
'
' Description:
' Discovery of Dell Server and all it's attributes.
'
' (c) Copyright Dell Inc. 2007-2015. All rights reserved
'**********************************************************************************

Option Explicit
On Error Resume Next
SetLocale("en-us")

Dim oArgs
Set oArgs = WScript.Arguments
If oArgs.Count &lt; 6 Then
Wscript.Quit -1
End If

' Declaration of Script argument and File logging variables
Dim sourceId, managedEntityId, targetComputer, minOMSAVersion, discoverRacUrl
Dim logMessage, logLevel, debugLevel, objLogTextFile, objLogFSO, doDiscoveryFlag

sourceId = oArgs(0)
managedEntityId = oArgs(1)
targetComputer = oArgs(2)
minOMSAVersion = oArgs(3)
discoverRacUrl = oArgs(4)
logLevel = oArgs(5)
doDiscoveryFlag = oArgs(6)

Dim oAPI, oDiscoveryData, oInst, oInstWatcher, oInst_Chassis, oRelationship
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, sourceId, managedEntityId)

' Begin Logheader
If logLevel &lt;&gt; 0 Then
Dim fileSize, strOutFile
Const strFileName = "Discovery_DellServer.log"
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 &amp; "\"&amp; strFileName
If Not objLogFSO.FileExists(strOutFile) Then
Set objLogTextFile = objLogFSO.CreateTextFile(strOutFile)
objLogTextFile.Close()
End If
fileSize = objLogFSO.GetFile(strOutFile).Size
If (fileSize &gt; MaxFileSize) Then
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForWriting, True)
Else
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForAppending, True)
End If
logMessage = "------------------------------------------------------"
MOMDebugLog 1, logMessage
logMessage = "INFO: Script - Dell Server Discovery : Start()"
MOMDebugLog 1, logMessage
logMessage = "INFO: Script - Arguments: Computer, minOMSAVersion = " &amp; targetComputer &amp; ", " &amp; minOMSAVersion
MOMDebugLog 1, logMessage
Err.Clear
End If

Sub MOMDebugLog (ByVal debugLevel, ByVal Message)
On Error Resume Next
If (debugLevel &gt; 0) and (debugLevel &lt;= logLevel) Then
objLogTextFile.WriteLine(Now() &amp; " ---- " &amp; Message)
Err.Clear
End If
End Sub
' End of Logheader

Dim strComputer, WbemServices, wbemObjectSet, wbemObject, sQuery
strComputer="."
Dim hardwareManufacturerName, manufacturer
Dim tModel, varModel, varModelDescription, varServiceTag, varExpressServCode, varAssetTag, varChassisSerialNumber, varOMSAVersion
Dim biosVersion, bmcIP, IPAddresses, varOMSAURL, varAddOMSAURL1, varAddOMSAURL2, varAddOMSAURL3, varAddOMSAURL4, strRacUrl, varCardDeviceStorageSize
Dim baseBoardType, osName, osVersion, NodeID

If doDiscoveryFlag = "true" Then
' Function to set all Server attributes to emptyStrings
InitializeServerAttributes()

Set WbemServices = GetObject("winmgmts:" &amp; "{impersonationLevel=impersonate}!\\" &amp; strComputer &amp; "\root\cimv2")
If (WbemServices is Nothing) Or (IsEmpty(WbemServices)) Or (Err.Number &lt;&gt; 0) Then
logMessage = " ERROR: Unable to open WMI Namespace root-cimv2. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
Else
' Function to get the SCOM Agent's manufacturer name (no OMSA infrastructure needed for this)
GetManufacturerName hardwareManufacturerName
logMessage = " Hardware Manufacturer Name query : " &amp; hardwareManufacturerName
MOMDebugLog 1, logMessage

'Possible values for Manufacturer are as follows
'a) for Dell Branded Servers Or Dell Branded OEM Servers(As per Existing code) -- "Dell " OR "Dell" OR "Dell Inc."
'b) for OEM Ready Servers ------------------- Space Character i.e " "
'Note : Used Trim() on manufacturer = "" to allow manufacturer with multiple Space Character.

manufacturer = Trim(Lcase(hardwareManufacturerName))
If instr(manufacturer, "dell ") = 1 OR manufacturer = "dell" OR manufacturer = "" Then
' Function to query model type in addition if a Dell box
GetSystemModelType varModel,manufacturer
'For OEM Ready server model can be blank in this case, in SCOM console it should display like "Not Available"
If Trim(varModel) = "" OR IsNull(varModel) Then
tModel = "Not Available"
Else
tModel = varModel
End If

'For OEM Ready server manufacturer is blank in this case, in SCOM console it should display like "Not Available"
If manufacturer = "" OR IsNull(manufacturer) Then
hardwareManufacturerName = "Not Available"
End If

varModel = (LCase(varModel))

logMessage = " Hardware Model query : " &amp; varModel
MOMDebugLog 1, logMessage

' Function to query basic CIM attributes (non-instrumentation) if a DellPowerEdge or Powervault
GetBasicOSAttributes osName
GetBasicOSType osVersion
GetBasicBIOSAttributes()
GetIPAddress()

Set WbemServices = GetObject("winmgmts:" &amp; "{impersonationLevel=impersonate}!\\" &amp; strComputer &amp; "\root\cimv2\dell")
If Err.Number &lt;&gt; 0 Then
' This error code captures case where there is failure connecting to sub-Dell namespace.
If (Instr(varModel, "precision rack")) Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.UnManagedRackWorkstation']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Please install/re-install a supported version of OpenManage Server Administrator (v6.2 or later)")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", targetComputer)
call oDiscoveryData.AddInstance(oInst)
logMessage = " ERROR: UnManaged Rack Workstation object created. Reason: Failure error while connecting to root-cimv2-Dell namespace."
MOMDebugLog 1, logMessage
Err.Clear
Else
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.UnManagedServer']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Please install/re-install a supported version of OpenManage Server Administrator (v6.2 or later)")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", targetComputer)
call oDiscoveryData.AddInstance(oInst)
logMessage = " ERROR: UnManaged Server object created. Reason: Failure error while connecting to root-cimv2-Dell namespace."
MOMDebugLog 1, logMessage
Err.Clear
End If
Else

If (WbemServices is Nothing) Or (IsEmpty(WbemServices)) Then
' This error code captures case when sub-Dell namespace returns empty object.
If (Instr(varModel, "precision rack")) Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.UnManagedRackWorkstation']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Please install/re-install a supported version of OpenManage Server Administrator (v6.2 or later)")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", targetComputer)
call oDiscoveryData.AddInstance(oInst)
logMessage = " INFO: UnManaged Rack Workstation object created. Reason: Empty object returned from WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists. OMSA install/reinstall needed." &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
Else
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.UnManagedServer']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Please install/re-install a supported version of OpenManage Server Administrator (v6.2 or later)")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", targetComputer)
call oDiscoveryData.AddInstance(oInst)
logMessage = " INFO: UnManaged Server object created. Reason: Empty object returned from WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists. OMSA install/reinstall needed." &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
Else
' Else case where sub-Dell namespace returns valid object with no errors.
GetInstrumentationAttribs varOMSAURL,varAddOMSAURL1,varAddOMSAURL2,varAddOMSAURL3,varAddOMSAURL4,varOMSAVersion

logMessage = " INFO: Dell namespace returns valid object with no errors"
MOMDebugLog 1, logMessage

If varOMSAVersion &lt; minOMSAVersion Then
' Create Unmanaged Dell object when user has OMSA Version lower than minVersion
If (Instr(varModel, "precision rack")) Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.UnManagedRackWorkstation']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Unable to connect to the Dell Namespace. Install a supported version of OpenManage Server Administrator (v6.2 or later)")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", targetComputer)
call oDiscoveryData.AddInstance(oInst)
logMessage = " INFO: UnManaged Rack Workstation object created. Reason: Unsupported OMSA Version. System: " &amp; targetComputer
MOMDebugLog 1, logMessage
Else
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.UnManagedServer']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", "Unable to connect to the Dell Namespace. Install a supported version of OpenManage Server Administrator (v6.2 or later)")
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", targetComputer)
call oDiscoveryData.AddInstance(oInst)
logMessage = " INFO: UnManaged Server object created. Reason: Unsupported OMSA Version. System: " &amp; targetComputer
MOMDebugLog 1, logMessage
End If
Else
' Since OMSAVersion is supported, go ahead with further discovery
GetChassisAttribs varAssetTag,varServiceTag, varExpressServCode
GetBaseBoardType baseBoardType
GetNodeID NodeID
MOMDebugLog 1, "NodeID:" &amp; NodeID
GetModelDesc varModelDescription ' refers Win32Chassis Model
GetStorageSize varCardDeviceStorageSize

' Perform DRAC Discovery through CLI if override option not disabled.
If discoverRacUrl Then
GetRACUrl_new strRacUrl
If Not (Instr(strRacUrl,".") &gt; 0) Then
GetRACUrl strRacUrl
If Not (Instr(strRacUrl,".") &gt; 0) Then
strRacUrl = "Not Available"
End If
End If
Else
strRacUrl = "RAC discovery is overridden to False"
logMessage = "INFO: DRAC Discovery override to False"
MOMDebugLog 1, logMessage
End If

' Perform BMC/iDRAC Discovery through CIM
GetBMC_IP bmcIP
If Not (Instr(bmcIP,".") &gt; 0) Then
bmcIP = "Not Available"
End If

AttributeValueCheck varModelDescription
AttributeValueCheck IPAddresses
AttributeValueCheck varOMSAURL
AttributeValueCheck varAddOMSAURL1
AttributeValueCheck varAddOMSAURL2
AttributeValueCheck varAddOMSAURL3
AttributeValueCheck varAddOMSAURL4
AttributeValueCheck varAssetTag
AttributeValueCheck varServiceTag
AttributeValueCheck varExpressServCode
AttributeValueCheck hardwareManufacturerName
AttributeValueCheck tModel
AttributeValueCheck osName
AttributeValueCheck osVersion
AttributeValueCheck varOMSAVersion
AttributeValueCheck biosVersion
AttributeValueCheck varCardDeviceStorageSize

'Dell Rack Workstation
If (Instr(varModel, "precision rack")) Then
If varModelDescription &lt;&gt; "Not Available" Then
varModelDescription = "Dell Rack Workstation Module - " &amp; varModelDescription
End If

set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.RackWorkstation']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", varModelDescription)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ChassisServiceTag$", "Not Applicable")
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/IPAddress$", IPAddresses)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAURL$", varOMSAURL)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RACURL$", strRacUrl)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RemoteAccessIP$", bmcIP)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AssetTag$", varAssetTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServiceTag$", varServiceTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ExpressServiceCode$", varExpressServCode)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Manufacturer$", hardwareManufacturerName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Model$", tModel)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystem$", osName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystemVersion$", osVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAVersion$", varOMSAVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/BIOSVersion$", biosVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/CardDeviceStorageSize$", varCardDeviceStorageSize)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL1$", varAddOMSAURL1)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL2$", varAddOMSAURL2)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL3$", varAddOMSAURL3)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL4$", varAddOMSAURL4)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServerType$", "Rack Workstation")
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/NodeID$", NodeID)
call oDiscoveryData.AddInstance(oInst)
logMessage = " INFO: Created Dell Rack Workstation Instance " &amp; targetComputer
logMessage = logMessage &amp; " INFO: Rack Workstation InventoryList - " &amp; varModelDescription &amp; ", " &amp; IPAddresses &amp; "," &amp; varOMSAURL &amp; "," &amp; strRacUrl &amp; "," &amp; bmcIP &amp; "," &amp; varAssetTag &amp; "," &amp; varServiceTag &amp; "," &amp; tModel &amp; "," &amp; osName &amp; "," &amp; osVersion &amp; "," &amp; varOMSAVersion &amp; "," &amp; biosVersion
MOMDebugLog 1, logMessage

'Sled Node
ElseIf (baseBoardType = "13") AND (Instr(varModel, "poweredge fm")) Then

GetChassisSerialNumber varChassisSerialNumber
AttributeValueCheck varChassisSerialNumber
If varModelDescription &lt;&gt; "Not Available" Then
varModelDescription = "Dell Sled FM Server Module - " &amp; varModelDescription
End If

'Removing Display String addition, commenting out
'If varServiceTag &lt;&gt; "Not Available" Then
' varServiceTag = varServiceTag &amp; " (Server Module)"
'End If

MOMDebugLog("Sled FM Server, chassis = " &amp; targetComputer &amp; "," &amp; varChassisSerialNumber)

set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.SledNode']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", varModelDescription)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ChassisServiceTag$", varChassisSerialNumber)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/IPAddress$", IPAddresses)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAURL$", varOMSAURL)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RACURL$", strRacUrl)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RemoteAccessIP$", bmcIP)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AssetTag$", varAssetTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServiceTag$", varServiceTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ExpressServiceCode$", varExpressServCode)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Manufacturer$", hardwareManufacturerName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Model$", tModel)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystem$", osName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystemVersion$", osVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAVersion$", varOMSAVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/BIOSVersion$", biosVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/CardDeviceStorageSize$", varCardDeviceStorageSize)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL1$", varAddOMSAURL1)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL2$", varAddOMSAURL2)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL3$", varAddOMSAURL3)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL4$", varAddOMSAURL4)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServerType$", "Sled FM Server")
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/NodeID$", NodeID)
call oDiscoveryData.AddInstance(oInst)

logMessage = " INFO: Created Sled Instance " &amp; targetComputer
logMessage = logMessage &amp; " INFO: Sled FM Server InventoryList - " &amp; varModelDescription &amp; ", " &amp; varChassisSerialNumber &amp; ", " &amp; IPAddresses &amp; "," &amp; varOMSAURL &amp; "," &amp; strRacUrl &amp; "," &amp; bmcIP &amp; "," &amp; varAssetTag &amp; "," &amp; varServiceTag &amp; "," &amp; tModel &amp; "," &amp; osName &amp; "," &amp; osVersion &amp; "," &amp; varOMSAVersion &amp; "," &amp; biosVersion
MOMDebugLog 1, logMessage

'sled
ElseIf (baseBoardType = "13") AND (Instr(varModel, "poweredge fc")) Then
GetChassisSerialNumber varChassisSerialNumber
AttributeValueCheck varChassisSerialNumber
If varModelDescription &lt;&gt; "Not Available" Then
varModelDescription = "Dell Sled Server Module - " &amp; varModelDescription
End If

'Removing Display String addition, commenting out
'If varServiceTag &lt;&gt; "Not Available" Then
' varServiceTag = varServiceTag &amp; " (Server Module)"
'End If

MOMDebugLog("Sled, chassis = " &amp; targetComputer &amp; "," &amp; varChassisSerialNumber)

set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.SledServer']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", varModelDescription)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ChassisServiceTag$", varChassisSerialNumber)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/IPAddress$", IPAddresses)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAURL$", varOMSAURL)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RACURL$", strRacUrl)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RemoteAccessIP$", bmcIP)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AssetTag$", varAssetTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServiceTag$", varServiceTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ExpressServiceCode$", varExpressServCode)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Manufacturer$", hardwareManufacturerName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Model$", tModel)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystem$", osName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystemVersion$", osVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAVersion$", varOMSAVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/BIOSVersion$", biosVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/CardDeviceStorageSize$", varCardDeviceStorageSize)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL1$", varAddOMSAURL1)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL2$", varAddOMSAURL2)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL3$", varAddOMSAURL3)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL4$", varAddOMSAURL4)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServerType$", "Sled Server")
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/NodeID$", NodeID)
call oDiscoveryData.AddInstance(oInst)

logMessage = " INFO: Created Sled Instance " &amp; targetComputer
logMessage = logMessage &amp; " INFO: InventoryList - " &amp; varModelDescription &amp; ", " &amp; varChassisSerialNumber &amp; ", " &amp; IPAddresses &amp; "," &amp; varOMSAURL &amp; "," &amp; strRacUrl &amp; "," &amp; bmcIP &amp; "," &amp; varAssetTag &amp; "," &amp; varServiceTag &amp; "," &amp; tModel &amp; "," &amp; osName &amp; "," &amp; osVersion &amp; "," &amp; varOMSAVersion &amp; "," &amp; biosVersion
MOMDebugLog 1, logMessage

ElseIf (baseBoardType = "13") Then
GetChassisSerialNumber varChassisSerialNumber
AttributeValueCheck varChassisSerialNumber
If varModelDescription &lt;&gt; "Not Available" Then
varModelDescription = "Dell Modular System Server Module - " &amp; varModelDescription
End If

'Removing Display String addition, commenting out
'If varServiceTag &lt;&gt; "Not Available" Then
' varServiceTag = varServiceTag &amp; " (Server Module)"
'End If

MOMDebugLog("Blad, chassis = " &amp; targetComputer &amp; "," &amp; varChassisSerialNumber)

set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.ModularBlade']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", varModelDescription)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ChassisServiceTag$", varChassisSerialNumber)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/IPAddress$", IPAddresses)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAURL$", varOMSAURL)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RACURL$", strRacUrl)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RemoteAccessIP$", bmcIP)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AssetTag$", varAssetTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServiceTag$", varServiceTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ExpressServiceCode$", varExpressServCode)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Manufacturer$", hardwareManufacturerName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Model$", tModel)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystem$", osName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystemVersion$", osVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAVersion$", varOMSAVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/BIOSVersion$", biosVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/CardDeviceStorageSize$", varCardDeviceStorageSize)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL1$", varAddOMSAURL1)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL2$", varAddOMSAURL2)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL3$", varAddOMSAURL3)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL4$", varAddOMSAURL4)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServerType$", "ModularBlade")
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/NodeID$", NodeID)
call oDiscoveryData.AddInstance(oInst)

logMessage = " INFO: Created Modular Blade Instance " &amp; targetComputer
logMessage = logMessage &amp; " INFO: InventoryList - " &amp; varModelDescription &amp; ", " &amp; varChassisSerialNumber &amp; ", " &amp; IPAddresses &amp; "," &amp; varOMSAURL &amp; "," &amp; strRacUrl &amp; "," &amp; bmcIP &amp; "," &amp; varAssetTag &amp; "," &amp; varServiceTag &amp; "," &amp; tModel &amp; "," &amp; osName &amp; "," &amp; osVersion &amp; "," &amp; varOMSAVersion &amp; "," &amp; biosVersion
MOMDebugLog 1, logMessage

ElseIf (baseBoardType = "10") Then
If Trim(varModelDescription) = "" OR IsNull(varModelDescription) Then
varModelDescription = "Not Available"
ElseIF varModelDescription &lt;&gt; "Not Available" Then
varModelDescription = "Dell Monolithic Server - " &amp; varModelDescription
End If

set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.MonolithicServer']$")
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='Windows!Microsoft.Windows.LogicalDevice']/Name$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Description$", varModelDescription)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/IPAddress$", IPAddresses)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ChassisServiceTag$", "Not Applicable")
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAURL$", varOMSAURL)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RACURL$", strRacUrl)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/RemoteAccessIP$", bmcIP)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AssetTag$", varAssetTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServiceTag$", varServiceTag)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ExpressServiceCode$", varExpressServCode)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Manufacturer$", hardwareManufacturerName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/Model$", tModel)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystem$", osName)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OperatingSystemVersion$", osVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/OMSAVersion$", varOMSAVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/BIOSVersion$", biosVersion)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/CardDeviceStorageSize$", varCardDeviceStorageSize)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL1$", varAddOMSAURL1)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL2$", varAddOMSAURL2)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL3$", varAddOMSAURL3)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/AddOMSAURL4$", varAddOMSAURL4)
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/ServerType$", "MonolithicServer")
call oInst.AddProperty("$MPElement[Name='Dell.WindowsServer.Server']/NodeID$", NodeID)
call oDiscoveryData.AddInstance(oInst)

logMessage = " INFO: Created Monolithic Server Instance " &amp; targetComputer
logMessage = " INFO: InventoryList - " &amp; varModelDescription &amp; "," &amp; IPAddresses &amp; "," &amp; varOMSAURL &amp; "," &amp; strRacUrl &amp; "," &amp; bmcIP &amp; "," &amp; varAssetTag &amp; "," &amp; varServiceTag &amp; "," &amp; tModel &amp; "," &amp; osName &amp; "," &amp; osVersion &amp; "," &amp; varOMSAVersion &amp; "," &amp; biosVersion
MOMDebugLog 1, logMessage
End If 'Classification of server and rack workstation

If (baseBoardType = "10") OR (baseBoardType = "13") Then
'create Server Hardware Health Watcher
logMessage = "Creating Dell Server Hardware Health" &amp; targetComputer
MOMDebugLog 1, logMessage
set oInstWatcher = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.ServerHardwareHealthWatcher']$")
call oInstWatcher.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", "$Target/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$")
call oInstWatcher.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "$Target/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$")
call oDiscoveryData.AddInstance(oInstWatcher)
logMessage = "Created Dell Server Hardware Health Watcher for " &amp; targetComputer
MOMDebugLog 1, logMessage

set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.Server']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", targetComputer)
call oDiscoveryData.AddInstance(oInst)

logMessage = " INFO: Created Monolithic Server Instance " &amp; targetComputer
logMessage = " INFO: InventoryList - " &amp; varModelDescription &amp; "," &amp; IPAddresses &amp; "," &amp; varOMSAURL &amp; "," &amp; strRacUrl &amp; "," &amp; bmcIP &amp; "," &amp; varAssetTag &amp; "," &amp; varServiceTag &amp; "," &amp; tModel &amp; "," &amp; osName &amp; "," &amp; osVersion &amp; "," &amp; varOMSAVersion &amp; "," &amp; biosVersion
MOMDebugLog 1, logMessage
End If 'Health watcher1

If (baseBoardType = "10") OR (baseBoardType = "13") Then
'create Server Hardware Health Watcher
logMessage = "Creating Dell Server Hardware Health" &amp; targetComputer
MOMDebugLog 1, logMessage
set oInstWatcher = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.ServerHardwareHealthWatcher']$")
call oInstWatcher.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", "$Target/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$")
call oInstWatcher.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "$Target/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$")
call oDiscoveryData.AddInstance(oInstWatcher)
logMessage = "Created Dell Server Hardware Health Watcher for " &amp; targetComputer
MOMDebugLog 1, logMessage

set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.Server']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", targetComputer)
call oDiscoveryData.AddInstance(oInst)

set oRelationship = oDiscoveryData.CreateRelationshipInstance("$MPElement[Name='ServerHardwareHealthWatcher.Contains.Server']$")
oRelationship.Source = oInstWatcher
oRelationship.Target = oInst
call oDiscoveryData.AddInstance(oRelationship)
logMessage = "Created the RealtionShip between Hardware Health Watcher and the Server"
MOMDebugLog 1, logMessage
End If 'Health watcher2

End If
End If 'OMSA ver chk
End If 'webm service dell ns

End If 'dell hw
End If 'webm service cimv2 ns
End If ' do iscovery
Call oAPI.Return(oDiscoveryData)

Set oDiscoveryData = Nothing
Set oAPI = Nothing
Set oRelationship = Nothing
Set oInst_Chassis = Nothing
Set oInst = Nothing
Set oInstWatcher = Nothing

logMessage = "INFO : Script - Dell Server Discovery : End()"
MOMDebugLog 1, logMessage
logMessage = "------------------------------------------------------"
MOMDebugLog 1, logMessage

' Close file used for logs
If logLevel &lt;&gt; 0 Then
objLogTextFile.Close
Set objLogTextFile = Nothing
Set objLogFSO = Nothing
End If

'*************************************************************************
' Function : InitializeServerAttributes()
' Desc : To initialize all attributes to empty strings
'*************************************************************************
Public Function InitializeServerAttributes()
On Error resume next
varModelDescription = ""
varModel = ""
IPAddresses = ""
varChassisSerialNumber = ""
varOMSAURL = ""
varAddOMSAURL1 = ""
varAddOMSAURL2 = ""
varAddOMSAURL3 = ""
varAddOMSAURL4 = ""
strRacUrl = ""
bmcIP = ""
varAssetTag = ""
varServiceTag = ""
varExpressServCode = ""
tModel = ""
osName = ""
osVersion = ""
varOMSAVersion = ""
biosVersion = ""
varCardDeviceStorageSize = ""
End Function

'*************************************************************************
' Function : AttributeValueCheck()
' Desc : To replace empty string with Not Available string
' Arguments : pass ByReference ServerAttribute
'*************************************************************************
Public Function AttributeValueCheck(ByRef ServerAttribute)
On Error Resume Next
if ServerAttribute = "" Then
ServerAttribute = "Not Available"
End if
End Function

Public Function AttributeValueCheck1(ByRef ServerAttribute)
On Error Resume Next
if ServerAttribute = "" Then
ServerAttribute = " "
End if
End Function

'*************************************************************************
' Function : GetChassisSerialNumber()
' Desc : To determine Chassis serial number
' Arguments : pass ByReference varChassisSerialNumber using CIM
'*************************************************************************
Public Function GetChassisSerialNumber(ByRef varChassisSerialNumber)
'Retrieving the Chassis Serial Number
On Error Resume Next
Set wbemObjectSet = GetObjectSet(wbemServices, "Select SerialNumber from DELL_BaseBoard WHERE baseBoardType = '13'", "SerialNumber", "DELL_BaseBoard")

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Dell_BaseBoard . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If wbemObjectSet is Nothing Then
logMessage = " ERROR: Unable to retrieve Chassis Serial Number"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: Chassis Serial Number retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItem is nothing Then
varChassisSerialNumber = objItem.SerialNumber
End If
Next
logMessage = "INFO: Chassis Serial Number : " &amp; varChassisSerialNumber
MOMDebugLog 1, logMessage

End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetBMC_IP()
' Desc : To determine BMC/iDRAC(11G onwards) IP which has IPMI functionality from CIM
' Arguments : pass ByReference Manufacturer string
'*************************************************************************
Function GetBMC_IP(ByRef bmcIP)
On Error Resume Next
Dim objItemBmcIP, colItems, objDellConnection, strComputer, sBmcQuery, sBmcIP, UpdateBMC_IP, GetBmcIP, logMessage, raType
strComputer="."
set objDellConnection = GetObject("winmgmts:" &amp; "{impersonationLevel=impersonate}!\\" &amp; strComputer &amp; "\root\cimv2\Dell")
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to connect to WMI Cimv2Dell. Error Number : " &amp; Err.Number &amp; ". Description :" &amp; Err.Description
UpdateBMC_IP = 0
MOMDebugLog 1, logMessage
Err.Clear
Else
If IsEmpty(objDellConnection) Then
logMessage = " ERROR: Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and Install/Re-Install ServerAdministrator to ensure this WMI namespace exists. " &amp; Err
UpdateBMC_IP = 0
MOMDebugLog 1, logMessage
Err.Clear
Else
sBmcQuery = "Select * from Dell_RemoteAccessServicePort"
Set colItems = GetObjectSet(objDellConnection, sBmcQuery, "RemoteAccessType", "Dell_RemoteAccessServicePort")
If Err.Number &lt;&gt; 0 Then
logMessage = "Unable to retrieve Dell_RemoteAccessServicePort . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
If Err.Number = -2147023169 Then
logMessage = " ERROR: RPC Failure occurred for namespace root-cimv2-dell"
UpdateBMC_IP = 0
MOMDebugLog 1, logMessage
End If
Err.Clear
End If
If colItems is Nothing Then
logMessage = " ERROR: Unable to retrieve RemoteAccessServicePort object"
MOMDebugLog 1, logMessage
Else
logMessage = "INFO: RemoteAccessServicePort object retrieved successfully"
MOMDebugLog 1, logMessage
For Each objItemBmcIP in colItems
If Err.Number &lt;&gt; 0 Then
If Err.Number = -2147023169 Then
logMessage = " ERROR: RPC Failure occurred for cimv2\dell - bmc info : " &amp; Err.Number
UpdateBMC_IP = 0
MOMDebugLog 1, logMessage
ElseIf Err.Number = -2147217389 Then ' Covering logging when instrumentation class needs to be repopulated
logMessage = " ERROR: If BMC present, Please Install/Re-Install ServerAdministrator on Dell Server : " &amp; fqdn2 &amp; Err.Number
Msg = 1
UpdateBMC_IP = 1
MOMDebugLog 1, logMessage
Else
logMessage = " ERROR: Object RetrievalLoop Error Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
UpdateBMC_IP = 0
MOMDebugLog 1, logMessage
End If
Err.Clear
End If
If Not objItemBmcIP is Nothing Then
sBmcIP = objItemBmcIP.AccessInfo
raType = objItemBmcIP.RemoteAccessType ' Get the Type of remote access service
' If (raType=0) OR (raType=13) Then
' sBmcIP = sBmcIP &amp; " (BMC)"
' ElseIf (raType=8) Then
' sBmcIP = sBmcIP &amp; " (IMC)"
' ElseIf (raType=9) Then
' sBmcIP = sBmcIP &amp; " (CMC)"
' ElseIf (raType=10) OR (raType=11) Then
' sBmcIP = sBmcIP &amp; " (iDRAC6)"
' End If
End If
Next
End If 'colItems is nothing

Set colItems = Nothing
End If 'dellconnection is nothing
End If 'error on dellconnection
If Err.Number &lt;&gt; 0 Then
logMessage = "ERROR: Error processing Dell_RemoteAccess attribs . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
On Error Goto 0
'Check sBmcIP values
If sBmcIP = "" Then
GetBmcIP = -1
If Msg &lt;&gt; 1 AND UpdateBMC_IP = 1 Then
logMessage = " ERROR: BMC physically not present for the Dell Server / Invalid Configuration of BMC / OMSA ReInstallation needed"
MOMDebugLog 1, logMessage
End If
Else ' if sBmcIP contains an ip
bmcIP = sBmcIP
logMessage = "INFO: BMC IP collected = " &amp; bmcIP
MOMDebugLog 1, logMessage
End If

Set objItemBmcIP = Nothing
Set colItems = Nothing
Set objDellConnection = Nothing
End Function

'*************************************************************************
' Function : GetManufacturerName()
' Desc : To determine hardware manufacturer from Win32_ComputerSystem
' Arguments : pass ByReference Manufacturer string
'*************************************************************************
Public Function GetManufacturerName (ByRef hardwareManufacturerName)
On Error Resume Next

Dim wBemObjectSet, objItem
Set wbemObjectSet = GetObjectSet(wbemServices, "select * from Win32_ComputerSystem", "Manufacturer", "Win32_ComputerSystem")

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Win32_ComputerSystem . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If

If (wbemObjectSet is Nothing) or (IsNull(wbemObjectSet)) Then
logMessage = " ERROR: Unable to retrieve Win32_ComputerSystem (empty/null)"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: HardwareManufacturerName Name retrieved successfully"
MOMDebugLog 1, logMessage
For Each objItem in wbemObjectSet
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If not objItem is nothing Then
hardwareManufacturerName = objItem.Manufacturer
End If

if hardwareManufacturerName &lt;&gt; "Dell Inc." Then
GetOEMManufacturerName hardwareManufacturerName
End If
Next
End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetOEMManufacturerName()
' Desc : To determine hardware manufacturer from CIM_BIOSElement
' Arguments : pass ByReference Manufacturer string
'*************************************************************************
Public Function GetOEMManufacturerName (ByRef hardwareManufacturerName)
On Error Resume Next

Dim wBemObjectSet_CIM_BIOSElement, objItem, wbemServicesForManfact
Set wbemServicesForManfact = GetObject("winmgmts:" &amp; "{impersonationLevel=impersonate}!\\" &amp; strComputer &amp; "\root\cimv2\dell")
If (wbemServicesForManfact is Nothing) Or (IsEmpty(wbemServicesForManfact)) Or (Err.Number &lt;&gt; 0) Then
logMessage = " ERROR: Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
Else
Set wBemObjectSet_CIM_BIOSElement = GetObjectSet(wbemServicesForManfact, "select * from CIM_BIOSElement", "Manufacturer", "CIM_BIOSElement")

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve CIM_BIOSElement . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If

If (wBemObjectSet_CIM_BIOSElement is Nothing) or (IsNull(wBemObjectSet_CIM_BIOSElement)) Then
logMessage = " ERROR: Unable to retrieve CIM_BIOSElement (empty/null)"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: HardwareManufacturerName Name retrieved successfully"
MOMDebugLog 1, logMessage
For Each objItem in wBemObjectSet_CIM_BIOSElement
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If not objItem is nothing Then
hardwareManufacturerName = objItem.Manufacturer
End If
Next
End If
Set wBemObjectSet_CIM_BIOSElement = Nothing
End If
End Function

'*************************************************************************
' Function : GetSystemModelType()
' Desc : To determine system model type from Win32_ComputerSystem
' Arguments : pass ByReference modelstring, manufacturer
'*************************************************************************
Public Function GetSystemModelType (ByRef varModel,ByRef hardwareManufacturerName)
On Error Resume Next
if hardwareManufacturerName &lt;&gt; "" Then
Set wbemObjectSet = GetObjectSet(wbemServices, "select * from Win32_ComputerSystem", "Model", "Win32_ComputerSystem")

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Win32_ComputerSystem . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If (wbemObjectSet is Nothing) or (IsNull(wbemObjectSet)) Then
logMessage = " ERROR: Unable to retrieve system model type information"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: System model type object retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItemModel
For Each objItemModel in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItemModel is nothing Then
varModel = objItemModel.Model
End If
Next
logMessage = "INFO: Function: Dell System Model : " &amp; varModel
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
Else
GetOEMSystemModelType varModel
End If
End Function

'*************************************************************************
' Function : GetOEMSystemModelType()
' Desc : To determine system model type from Dell_Chassis
' Arguments : pass ByReference modelstring
'*************************************************************************
Public Function GetOEMSystemModelType (ByRef varModel)
On Error Resume Next
Dim wbemServicesForModel
Set wbemServicesForModel = GetObject("winmgmts:" &amp; "{impersonationLevel=impersonate}!\\" &amp; strComputer &amp; "\root\cimv2\dell")
If (wbemServicesForModel is Nothing) Or (IsEmpty(wbemServicesForModel)) Or (Err.Number &lt;&gt; 0) Then
logMessage = " ERROR: Unable to open WMI Namespace root-cimv2-dell. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
Else
Set wbemObjectSet_Dell_Chassis = GetObjectSet(wbemServicesForModel, "select * from Dell_Chassis ", "Model", "Dell_Chassis")

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Dell_Chassis . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If (wbemObjectSet_Dell_Chassis is Nothing) or (IsNull(wbemObjectSet_Dell_Chassis)) Then
logMessage = " ERROR: Unable to retrieve system model type information"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: System model type object retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItemModel
For Each objItemModel in wbemObjectSet_Dell_Chassis
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItemModel is nothing Then
varModel = objItemModel.Model
End If
Next
logMessage = "INFO: Function: Dell System Model : " &amp; varModel
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet_Dell_Chassis = Nothing
End If
End Function

'*************************************************************************
' Function : GetBasicOSAttributes()
' Desc : To determine OS attributes from CIM_OperatingSystem
' Arguments : pass ByReference
'*************************************************************************
Public Function GetBasicOSAttributes(ByRef osName)
' Retrieving the Operating System
On Error Resume Next
Set wbemObjectSet = GetObjectSet(wbemServices, "select * from CIM_OperatingSystem", "Caption", "CIM_OperatingSystem")

'Code for adding Storage Server in OS Name
Dim regOSProductSuiteName,objShell,arrOSProductSuiteName,ProductSuiteStrValue
regOSProductSuiteName = "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductSuite"
Set objShell = CreateObject("WScript.Shell")
arrOSProductSuiteName = objShell.RegRead(regOSProductSuiteName)

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve CIM_OperatingSystem . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If (wbemObjectSet is Nothing) Or (isNull(wbemObjectSet)) Then
logMessage = " ERROR: Unable to retrieve Operating system information"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: Operating system object retrieved successfully"

Dim objItemOperatingSystem
For Each objItemOperatingSystem in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItemOperatingSystem is nothing Then
osName = objItemOperatingSystem.Caption
Dim osVersionArray
osVersionArray=split(objItemOperatingSystem.Version,".")
osVersion = "Version " &amp; osVersionArray(0) &amp; "." &amp; osVersionArray(1) &amp;" (Build " &amp; osVersionArray(2) &amp; ":" &amp; objItemOperatingSystem.CSDVersion &amp; ")"
' Code for adding Storage Server in OS Name
if Not isnull(arrOSProductSuiteName) Then
For Each ProductSuiteStrValue in arrOSProductSuiteName
If Instr(ProductSuiteStrValue,"Storage") And Instr(osName,"Server 2003") Then
osName = Replace(osName,"Server 2003","Storage Server 2003")
Exit For
End If
Next
End If
End If
Next
logMessage = "INFO: Function: Dell Server OS : " &amp; osName
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetBasicOSType()
' Desc : To determine OS type from CIM_OperatingSystem
' Arguments : pass ByReference
'*************************************************************************
Public Function GetBasicOSType(ByRef osVersion)
' Retrieving the Operating System Type
On Error Resume Next
Dim wbemObjectSet_CIM_ComputerSystem
'Set wbemObjectSet_CIM_ComputerSystem = wbemServices.ExecQuery("Select * from CIM_ComputerSystem")
Set wbemObjectSet_CIM_ComputerSystem = GetObjectSet(wbemServices, "select * from CIM_ComputerSystem", "SystemType", "CIM_ComputerSystem")

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve CIM_ComputerSystem . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If (wbemObjectSet_CIM_ComputerSystem is Nothing) Or (isNull(wbemObjectSet_CIM_ComputerSystem)) Then
logMessage = " ERROR: Unable to retrieve Computer System information"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "Computer System object retrieved successfully"
MOMDebugLog 1, logMessage

Dim objItemComputerSystem
For Each objItemComputerSystem in wbemObjectSet_CIM_ComputerSystem
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItemComputerSystem is nothing Then
if Instr(LCase(objItemComputerSystem.SystemType), "x86") Then
osVersion = osVersion &amp; " (x86)"
End if
if Instr(LCase(objItemComputerSystem.SystemType), "x64") Then
osVersion = osVersion &amp; " (x64)"
End if
End If
Next
End If

if Instr(osName,"Server") And Instr(osName,"2008") Then
'to check if the Operating System is Server Core / Full Installation
GetLonghornVersion()
End if
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetLonghornVersion()
' Desc : To determine LHVersion using CIM
' Arguments : NA
'*************************************************************************
Public Function GetLonghornVersion()
On Error Resume Next
Dim wbemObjectSet_WIN32_OperatingSystem
'Set wbemObjectSet_WIN32_OperatingSystem = wbemServices.ExecQuery("Select * from Win32_OperatingSystem")
Set wbemObjectSet_WIN32_OperatingSystem = GetObjectSet(wbemServices, "select * from Win32_OperatingSystem", "OperatingSystemSKU", "Win32_OperatingSystem")

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Win32_OperatingSystem . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If (wbemObjectSet_WIN32_OperatingSystem is Nothing) Or (isNull(wbemObjectSet_WIN32_OperatingSystem)) Then
logMessage = " ERROR: Unable to retrieve Operating System information"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: Operating System object retrieved successfully"
MOMDebugLog 1, logMessage

Dim objItemOperatingSystem
For Each objItemOperatingSystem in wbemObjectSet_WIN32_OperatingSystem
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItemOperatingSystem is nothing Then
Dim OS_SKU
OS_SKU = objItemOperatingSystem.OperatingSystemSKU
if (OS_SKU=12) or (OS_SKU=13) or (OS_SKU=14) Then
osVersion = osVersion &amp; " Server Core Installation"
Else
osVersion = osVersion &amp; " Server Full Installation"
End if
End If
Next
End If
End Function

'*************************************************************************
' Function : GetBasicBIOSAttributes()
' Desc : To determine Basic BIOS attributes from root-cimv2 namespace
' Arguments : NA
'*************************************************************************
Public Function GetBasicBIOSAttributes()
On Error Resume Next
'Retrieving the biosVersion
Set wbemObjectSet = GetObjectSet(wbemServices, "select * from Win32_BIOS", "SMBIOSbiosVersion", "Win32_BIOS")

If Err.Number &lt;&gt; 0 Then
logMessage = "Unable to retrieve Win32_BIOS . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If (wbemObjectSet is Nothing) Or (isNull(wbemObjectSet)) Then
logMessage = " ERROR: Unable to retrieve biosVersion information"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: biosVersion object retrieved successfully"
MOMDebugLog 1, logMessage

Dim objItembiosVersion
For Each objItembiosVersion in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = "Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItembiosVersion is nothing Then
biosVersion = objItembiosVersion.SMBIOSbiosVersion
End If
Next
logMessage = "INFO: Function: BIOS Version : " &amp; biosVersion
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetIPAddress()
' Desc : To determine IP address of Agent system from root-cimv2
' Arguments :
'*************************************************************************
Public Function GetIPAddress ()
'Retrieving the IP Address
On Error Resume Next
Set wbemObjectSet = GetObjectSetMod(wbemServices, "Select * from Win32_NetworkAdapterConfiguration", "Win32_NetworkAdapterConfiguration")

If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Win32_NetworkAdapterConfiguration . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If (wbemObjectSet is Nothing) or (IsNull(wbemObjectSet)) Then
logMessage = " ERROR: Unable to retrieve IP address of the system"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: IP address object retrieved successfully"
MOMDebugLog 1, logMessage

Dim objItemIPAddress
Dim STR

For Each objItemIPAddress in wbemObjectSet
'Error Handling
If Err.Number &lt;&gt; 0 Then
logMessage = "Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItemIPAddress is nothing Then
If isarray(objItemIPAddress.IPAddress) Then
For each STR in objItemIPAddress.IPAddress
If ((STR &lt;&gt; "") AND (STR &lt;&gt; "0.0.0.0")) Then
If IPAddresses = "" Then
IPAddresses = STR
Else
IPAddresses = IPAddresses &amp; ", " &amp; STR
End If
End If
Next
End If
End If
Next
logMessage = "INFO: Function: IP address(es) of the system : " &amp; IPAddresses
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetInstrumentationAttribs()
' Desc : To determine OMSA details from CIM
' Arguments : pass ByReference 3 variables - OMSAUrl, Additional OMSA Urls and OMSAVersion
'*************************************************************************

Public Function GetInstrumentationAttribs (ByRef varOMSAURL, ByRef varAddOMSAURL1, ByRef varAddOMSAURL2, ByRef varAddOMSAURL3, ByRef varAddOMSAURL4, ByRef varOMSAVersion)
On Error Resume Next
Dim arrURL, arrURL1, counter
Set wbemObjectSet = GetObjectSet(wbemServices, "Select * from Dell_SoftwareFeature", "Version", "Dell_SoftwareFeature")
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Dell_SoftwareFeature . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If wbemObjectSet is Nothing Then
logMessage = "INFO: Unable to retrieve Dell_SoftwareFeature Attributes"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: Dell_SoftwareFeature attributes retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItem
Dim itemOMSAURL, testURL

For Each objItem in wbemObjectSet

'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If

'Object Retrieval
If not objItem is nothing Then

varOMSAVersion = objItem.Version
counter = 0
arrURL = Split(objItem.OmsaURL, ",")

For each itemOMSAURL in arrURL

arrURL1 = Split(itemOMSAURL, "?")
testURL = Trim(arrURL1(0))

if Not isLinkLocalURL(testURL) Then
MomDebugLog 1, " Including OMSA URL: " &amp; testURL
Select Case counter
Case 0
varOMSAURL = testURL
Case 1
varAddOMSAURL1 = testURL
Case 2
varAddOMSAURL2 = testURL
Case 3
varAddOMSAURL3 = testURL
Case 4
varAddOMSAURL4 = testURL
End Select
counter = counter + 1
else
MomDebugLog 1, " Excluding Link-Local URL: " &amp; testURL
end if

Next 'each itemOMSAURL in arrURL
If instr(varOMSAURL, "//169.254" ) &gt; 0 Then
MomDebugLog 1, "Check for valid url " &amp; varOMSAURL
If varAddOMSAURL1 &lt;&gt; "" and instr(varAddOMSAURL1, "//169.254" ) &lt;= 0 then
varOMSAURL = varAddOMSAURL1
elseIf varAddOMSAURL2 &lt;&gt; "" and instr(varAddOMSAURL2, "//169.254" ) &lt;= 0 then
varOMSAURL= varAddOMSAURL2
elseIf varAddOMSAURL3 &lt;&gt; "" and instr(varAddOMSAURL3, "//169.254" ) &lt;= 0 then
varOMSAURL= varAddOMSAURL3
elseIf varAddOMSAURL4 &lt;&gt; "" and instr(varAddOMSAURL4, "//169.254" ) &lt;= 0 then
varOMSAURL= varAddOMSAURL4
end IF
ENd if
End If 'ObjItem Null
Next 'Each wbemObjectSet

logMessage = "INFO: OMSA URL : " &amp; varOMSAURL &amp; " OMSA Version : " &amp; varOMSAVersion
MOMDebugLog 1, logMessage
End If 'wbemObjectSet is Nothing
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : isLinkLocalURL()
' Desc : To determine whether a URL is a link-local URL
' Arguments : pass ByVal sURL string
'*************************************************************************
Public Function isLinkLocalURL (ByVal sURL)
On Error Resume Next
'In IPv4, start pattern is 169.254.0.0/16
'In IPv6, start pattern is fe80::/64
'OMSA returns as https:// url, [added for IPv6

MOMDebugLog 1, "Checking whether URL is Link-Local..." &amp; sURL &amp; "."
If instr(sURL, "//169.254.0" ) &gt; 0 Then
isLinkLocalURL = vbTrue
exit function
End If

If instr(sURL, "//[fe80::" ) &gt; 0 Then
isLinkLocalURL = vbTrue
exit function
End If

isLinkLocalURL = vbFalse
end function

'*************************************************************************
' Function : GetChassisAttribs()
' Desc : To determine Chassis attributes from CIM
' Arguments : pass ByReference AssetTag, ServiceTag, ExpressServiceCode
'*************************************************************************
Public Function GetChassisAttribs (ByRef varAssetTag, ByRef varServiceTag, ByRef varExpressServCode)
'Retrieving the Dell_Chassis Attributes
On Error Resume Next
Set wbemObjectSet = GetObjectSet(wbemServices, "Select * from Dell_Chassis", "SystemClass", "Dell_Chassis")
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Dell_Chassis . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If wbemObjectSet is Nothing Then
logMessage = "INFO: Unable to retrieve Dell_Chassis Attributes"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: Dell_Chassis Attributes retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItem is nothing Then
varAssetTag = objItem.AssetTag
varServiceTag = objItem.SerialNumber
if not objItem.ChassisExpressServiceCode is nothing Then
varExpressServCode = objItem.ChassisExpressServiceCode
End If
End If
Next
logMessage = "INFO: Asset Tag : " &amp; varAssetTag &amp; " Service Tag : " &amp; varServiceTag
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetBaseBoardType()
' Desc : To determine baseboard type for determining monolithic server or modular blade
' Arguments : pass ByReference baseboard type
'*************************************************************************
Public Function GetBaseBoardType (ByRef baseBoardType)
'Retrieving the baseBoardType
On Error Resume Next
Set wbemObjectSet = GetObjectSet(wbemServices, "Select * from DELL_Baseboard", "BaseboardType", "DELL_Baseboard")
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Dell_baseBoard . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If wbemObjectSet is Nothing Then
logMessage = " ERROR: Unable to retrieve baseBoardType"
MOMDebugLog 1, logMessage
Else
logMessage = "INFO: Base board type retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItem is nothing Then
baseBoardType = objItem.baseBoardType
logMessage = "INFO: Baseboardentry = " &amp; baseBoardType
MOMDebugLog 1, logMessage
End If
Next
logMessage = "INFO: baseBoardType : " &amp; baseBoardType
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetModelDesc()
' Desc : To determine server model description using CIM
' Arguments : pass ByReference ModelDesc
'*************************************************************************
Public Function GetModelDesc (ByRef varModelDescription)
'Retrieving the ModelType
On Error Resume Next
Set wbemObjectSet = GetObjectSet(wbemServices, "Select * from Dell_Chassis", "SystemClass", "Dell_Chassis")
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Dell_Chassis . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If wbemObjectSet is Nothing Then
logMessage = " ERROR: Unable to retrieve Dell_Chassis"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: Dell_chassis retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItem is nothing Then
varModelDescription = objItem.Model
End If
Next
logMessage = "INFO: ModelType : " &amp; varModelDescription
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetNodeID()
' Desc : To determine NodeID
' Arguments : pass ByReference NodeID
'*************************************************************************
Public Function GetNodeID (ByRef NodeID)
'Retrieving the NodeID
On Error Resume Next
Set wbemObjectSet = GetObjectSet(wbemServices, "Select * from Dell_Chassis", "SystemClass", "Dell_Chassis")
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Dell_Chassis . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If wbemObjectSet is Nothing Then
logMessage = " ERROR: Unable to retrieve Dell_Chassis"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: Dell_chassis retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItem
For Each objItem in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItem is nothing Then
NodeID = objItem.ChassisNodeID
End If
Next
logMessage = "INFO: NodeID : " &amp; NodeID
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
End Function

'*************************************************************************
' Function : GetStorageSize()
' Desc : To determine the card device storage size using CIM
' Arguments : pass ByReference ModelDesc
'*************************************************************************
Public Function GetStorageSize (ByRef varCardDeviceStorageSize)
'Retrieving the Card device StorageSize
On Error Resume Next
Set wbemObjectSet = GetObjectSet(wbemServices, "Select * from DELL_ManagedSystemServicesDevice", "deviceSize", "DELL_ManagedSystemServicesDevice")
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve DELL_ManagedSystemServicesDevice . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If wbemObjectSet is Nothing Then
logMessage = " ERROR: Unable to retrieve DELL_ManagedSystemServicesDevice"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: DELL_ManagedSystemServicesDevice retrieved successfully"
MOMDebugLog 1, logMessage
Dim objItem, device
device = -1
For Each objItem in wbemObjectSet
'Error checking
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
'Object Retrieval
If not objItem is nothing Then
varCardDeviceStorageSize = objItem.deviceSize
device = objItem.deviceType
If device = 0 Then
varCardDeviceStorageSize = varCardDeviceStorageSize &amp; " (Base managed device)"
ElseIf device = 1 Then
varCardDeviceStorageSize = varCardDeviceStorageSize &amp; " (Optional managed device)"
End if
End If
Next
logMessage = "INFO: CardStoragesize : " &amp; varCardDeviceStorageSize
MOMDebugLog 1, logMessage
End If
Set wbemObjectSet = Nothing
End Function


'*************************************************************************
' Function : GetRACUrl_new()
' Desc : To determine RAC Url for DRAC hardware
' Arguments : pass ByReference RACURL string
'*************************************************************************
Public Function GetRACUrl_new (ByRef sRACUrl)
On Error Resume Next
Dim wbemObjectSet, racAgentExist, objItem, strLaunchRACURL
Dim version, rc, rac, RegError
Dim logMessage, Message
sRACUrl = 0

Set wbemObjectSet = GetObjectSet(wbemServices, "Select * from Dell_RemoteAccessServicePort", "AccessInfoIPv4", "Dell_RemoteAccessServicePort")
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Unable to retrieve Dell_RemoteAccessServicePort . Err Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If

If wbemObjectSet is Nothing Then
logMessage = " ERROR: Unable to retrieve Dell_RemoteAccessServicePort"
MOMDebugLog 1, logMessage
Err.Clear
Else
logMessage = "INFO: Dell_RemoteAccessServicePort retrieved successfully"
MOMDebugLog 1, logMessage

For Each objItem in wbemObjectSet
If Err.Number &lt;&gt; 0 Then
logMessage = " ERROR: Object loop retrieval error. ErrNumber:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, logMessage
Err.Clear
End If
If not objItem is nothing Then
strLaunchRACURL = objItem.AccessInfoIPv4
logMessage = "INFO: Launch RAC URL : " &amp; strLaunchRACURL
MOMDebugLog 1, logMessage
End If
Next
End If

sRACUrl = strLaunchRACURL
Set strLaunchRACURL = Nothing
End Function

'*************************************************************************
' Code to discover DRAC hardware across generations
'*************************************************************************
' Global variables across functions Exec and Run (Exec for 5.3 and above, Run for &lt; 5.3)
Dim blsRacType, blsRacInstalled , blsRacGen4, RegError, rc, blsRacGen4Plus, Message
Dim WshShell, oShell, objStdOut, oFile, fso, strLine, nPos, RacadmErrStream
Dim strRacType, strRacIpAddress, strRacPortNumber, strRacPortDec
Dim RacPath, drive, wintemp_path, filespec, filespec5Plus, filespec4
Dim Command10, Command11, Command2, Command3, a, b, RacExitFlag
Dim WshShell2, oShell2, objStdOut2 ' Exec cfgLan
Dim WshShell3, oShell3, objStdOut3 ' Run cfgLan
Const WAIT_LOOP = 1000000

'*************************************************************************
' Function : GetRACUrl()
' Desc : To determine RAC Url for DRAC hardware
' Arguments : pass ByReference RACURL string
'*************************************************************************
Public Function GetRACUrl (ByRef sRACUrl)
On Error Resume Next
Dim strLaunchRACURL, racAgentExist, strAlertDesc
Dim version, rc, rac, RegError
Dim logMessage, Message
racAgentExist = 0
RacExitFlag = 0
sRACUrl = 0
Dim version1

version1 = CheckVBScriptEngine()'Check VBScript engine version
If version1 = True Then
' Exec Optimization for Read from Standard Output (VBScript &gt; 5.3)
rc = ExecRACURL (racAgentExist, strLaunchRACURL)
If rc &lt;&gt; 0 Then
Message = " ERROR: Main: ExecRACURL error : " &amp; rc
RacExitFlag = 1
MOMDebugLog (Message)
Err.Clear
Exit Function
End If
ElseIf version1 = False Then
' Run , Redirect to file and Read from File (VBScript &lt; 5.3, StdOut not supported)
rc =RunRACURL (racAgentExist, strLaunchRACURL)
If rc &lt;&gt; 0 Then
Message = " ERROR: Main: RunRACURL error : " &amp; rc
RacExitFlag = 1
MOMDebugLog (Message)
Err.Clear
Exit Function
End If
Else
Message = " ERROR: CheckVBScriptEngine Error : " &amp; version1
RacExitFlag = 1
MOMDebugLog (Message)
Err.Clear
Exit Function
End If

Message = " INFO: Main:RACURL (AgentExist,URL) - " &amp; racAgentExist &amp; "," &amp; strLaunchRACURL
If RacExitFlag = 0 Then
If racAgentExist = 1 Then ' If RAC Agent exists
sRACUrl = strLaunchRACURL
End If
End If

Set strLaunchRACURL = Nothing
Set strAlertDesc = Nothing
Set rc = Nothing
End Function

'*****************************************************************
' RunRacUrl
'Routine to use Run - Redirect to file and Read from File,Del File
' Arguments: RacAgent for existence of RAC, RACUrl
'*****************************************************************
Function RunRacUrl(ByRef RacAgent, ByRef RacUrl)
On Error Resume Next
RegError = 0
Const ForReading = 1
Dim guid1, guid2, guid3, guid4
Command10 = " getconfig -g cfgCurrentLanNetworking"
Command11 = " getconfig -g cfgLanNetworking"
Command2 = " getconfig -g cfgRacTuning"
Command3 = " getconfig -g idRacInfo"

blsRacInstalled = 0 ' will have IP address
blsRacGen4Plus = 0 ' will have Port (subset of RacInstalled)

GetPathParameter RacPath, drive
GetTempFolderPath wintemp_path, drive
GetRACFileGUID guid1, guid2

If RacExitFlag = 1 Then
RunRacUrl = -1
Exit Function
End If

filespec = wintemp_path &amp; "\" &amp; guid1 &amp; ".txt"
Command3 = "cmd /c " &amp; chr(34) &amp; RacPath &amp; "\racadm.exe" &amp; Chr(34) &amp; Command3 &amp; " &gt; " &amp; filespec
Message = "Run: Command for DRAC Type - " &amp; Command3
Set oShell3 = CreateObject ("WScript.Shell")
rc = oShell3.run(Command3,0,true)
if (rc &lt;&gt; 0) OR (bFileExists(filespec) = False) Then
Message = " ERROR: PORT: RunRacUrl: OShellRun ERROR: " &amp; rc &amp; " for " &amp; Command3
MOMDebugLog (Message)
rc = DelFile(filespec)
If rc &lt;&gt; 0 Then
Message = "WARNING: - DelFile " &amp; filespec
MOMDebugLog (Message)
End If
RunRacUrl = -1
Err.Clear
Exit Function
end if
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(filespec, ForReading, False)
Do While Not oFile.AtEndOfStream
strLine = Trim(oFile.ReadLine)
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = " ERROR: Error in Racadm Output for idRacInfo " &amp; strLine
MOMDebugLog (Message)
rc = DelFile(filespec)
If rc &lt;&gt; 0 Then
Message = "WARNING: - DelFile " &amp; filespec
MOMDebugLog (Message)
End If
RunRacUrl = -1
Err.Clear
Exit Function 'Add MP22UT.X01
End If
If Instr(LCase(strLine),Lcase("idRacType")) Then
nPos = Instr(LCase(strLine), "=")
strRacType = Trim(strLine)
strRacType = Mid(strRacType,nPos+1,5)
strRacType = Trim(strRacType)
Message = " INFO: Detected DRAC Type (hex)= " &amp; strRacType
blsRacType = 1
End If
Loop

Set oShell3 = Nothing
'Set objStdOut = Nothing
oFile.close
'Clean up the CLI Output : Delete %WINTEMP% \ %Guid1% .txt
rc = DelFile(filespec)
If rc &lt;&gt; 0 Then
Message = " WARNING:! - DelFile " &amp; filespec
MOMDebugLog (Message)
End If
Set filespec = Nothing

If blsRacType = 1 Then
GetRACFileGUID guid3, guid4
If Instr(Lcase(strRacType),"3") OR Instr(Lcase(strRacType),"4") OR Instr(Lcase(strRacType),"5") OR Instr(Lcase(strRacType),"7")Then
'Method1 for DRAC4 or below
filespec4 = wintemp_path &amp; "\" &amp; guid4 &amp; ".txt"
'Set WshShell3 = CreateObject("WScript.Shell")
Command10 = "cmd /c " &amp; chr(34) &amp; RacPath &amp; "\racadm.exe" &amp; Chr(34) &amp; Command10 &amp; " &gt; " &amp; filespec4
Set oShell3 = CreateObject ("WScript.Shell")
rc = oShell3.run(Command10,0,true)
if (rc &lt;&gt; 0) OR (bFileExists(filespec4) = False) Then
Message = " ERROR: PORT: RunRacUrl: OShellRun ERROR: " &amp; rc &amp; " for " &amp; Command10
MOMDebugLog (Message)
rc = DelFile(filespec4)
If rc &lt;&gt; 0 Then
Message = " WARNING: DelFile " &amp; filespec4
MOMDebugLog (Message)
End If
RunRacUrl = -1
Err.Clear
Exit Function
end if

Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(filespec4, ForReading, False)
Do While Not oFile.AtEndOfStream
strLine = Trim(oFile.ReadLine)
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for IPaddr " &amp; strLine
rc = DelFile(filespec4)
If rc &lt;&gt; 0 Then
Message = "Error! - DelFile " &amp; filespec4
MOMDebugLog (Message)
End If
RunRacUrl = -1
Err.Clear
Exit Function
End If
If Instr(LCase(strLine),Lcase("cfgNicCurrentIpAddress")) Then
nPos = Instr(LCase(strLine), "=")
strRacIpAddress = Trim(strLine)
strRacIpAddress = Mid(strRacIpAddress,nPos+1,16)
blsRacInstalled = 1
End If
Loop

Set oShell3 = Nothing
'Set objStdOut = Nothing
oFile.close
'Clean up the CLI Output : Delete %WINTEMP% \ %Guid1% .txt
rc = DelFile(filespec4)
If rc &lt;&gt; 0 Then
Message = " WARNING: - DelFile " &amp; filespec4
MOMDebugLog (Message)
End If
Set filespec4 = Nothing
ElseIf Instr(Lcase(strRacType),"6") OR Instr(Lcase(strRacType),"8") OR Instr(Lcase(strRacType),"10") OR Instr(Lcase(strRacType),"11") OR Instr(Lcase(strRacType),"16") OR Instr(Lcase(strRacType),"17") OR Instr(Lcase(strRacType),"32") OR Instr(Lcase(strRacType),"33") OR Instr(Lcase(strRacType),"34") Then
' Method for DRAC5 and iDRAC hardware
filespec5Plus = wintemp_path &amp; "\" &amp; guid3 &amp; ".txt"
'Set WshShell3 = CreateObject("WScript.Shell")
Command11 = "cmd /c " &amp; chr(34) &amp; RacPath &amp; "\racadm.exe" &amp; Chr(34) &amp; Command11 &amp; " &gt; " &amp; filespec5Plus
Set oShell3 = CreateObject ("WScript.Shell")
rc = oShell3.run(Command11,0,true)
If (rc &lt;&gt; 0) OR (bFileExists(filespec5Plus) = False) Then
Message = " ERROR: PORT: RunRacUrl: OShellRun ERROR: " &amp; rc &amp; " for " &amp; Command11
MOMDebugLog (Message)
rc = DelFile(filespec5Plus)
If rc &lt;&gt; 0 Then
Message = " WARNING: - DelFile " &amp; filespec5Plus
MOMDebugLog (Message)
End If
RunRacUrl = -1
Err.Clear
Exit Function
End if

Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(filespec5Plus, ForReading, False)
Do While Not oFile.AtEndOfStream
strLine = Trim(oFile.ReadLine)
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = " ERROR: Error in Racadm Output for IPaddr cfgLan " &amp; strLine
rc = DelFile(filespec5Plus)
If rc &lt;&gt; 0 Then
Message = " WARNING: - DelFile " &amp; filespec5Plus
MOMDebugLog (Message)
End If
RunRacUrl = -1
Err.Clear
Exit Function
End If
If Instr(LCase(strLine),Lcase("cfgNicIpAddress")) Then
nPos = Instr(LCase(strLine), "=")
strRacIpAddress = Trim(strLine)
strRacIpAddress = Mid(strRacIpAddress,nPos+1,16)
blsRacInstalled = 1
End If
Loop

Set oShell3 = Nothing
'Set WshShell3 = Nothing
'Set objStdOut = Nothing
oFile.close
'Clean up the CLI Output : Delete %WINTEMP% \ %Guid1% .txt
rc = DelFile(filespec5Plus)
If rc &lt;&gt; 0 Then
Message = "Error! - DelFile " &amp; filespec5Plus
MOMDebugLog (Message)
End If
Set filespec5Plus = Nothing
' End of RAC5+ If clause
Else ' When DRAC Type is nether 3,4,5,6,7
Message = "Unsupported DRAC Type = " &amp; strRacType
MOMDebugLog (Message)
End If
Else
Message = "DRAC Type not found via idRacInfo command. "
MOMDebugLog (Message)
End If ' End of blsRacType IF clause
' Output OMSA CLI to file RACGuid1.txt, wait until RUN Command is completed
' RAC5+ cfgLanNetworking in place of cfgCurrentLanNetworking (Invalid Group)

If blsRacInstalled = 1 Then
' If Command10/Command11 runs and IpAddress was found
Set oShell = CreateObject("WScript.Shell")
filespec = wintemp_path &amp; "\" &amp; guid2 &amp; ".txt"
Command2 = "cmd /c " &amp; chr(34) &amp; RacPath &amp; "\racadm.exe" &amp; Chr(34) &amp; Command2 &amp; " &gt; " &amp; filespec
rc = oShell.run(Command2,0,true)
if (rc &lt;&gt; 0) OR (bFileExists(filespec) = False) Then
Message = "PORT: RunRacUrl: OShellRun ERROR: " &amp; rc &amp; " for " &amp; Command2
MOMDebugLog (Message)
rc = DelFile(filespec)
If rc &lt;&gt; 0 Then
Message = "Error! - DelFile " &amp; filespec
MOMDebugLog (Message)
End If
RunRacUrl = -1
Err.Clear
Exit Function
end if
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(filespec, ForReading, False)
Do While Not oFile.AtEndOfStream
strLine = Trim(oFile.ReadLine)
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for Port " &amp; strLine
MOMDebugLog (Message)
rc = DelFile(filespec)
If rc &lt;&gt; 0 Then
Message = "Error! - DelFile " &amp; filespec
MOMDebugLog (Message)
End If
Err.Clear
Exit Function
End If
If Instr(LCase(strLine),LCase("cfgRacTuneHttpsPort")) Then
nPos = Instr(LCase(strLine), "=")
strRacPortNumber= Trim(strLine)
If Instr(strRacPortNumber,"0x") Then
strRacPortNumber= Mid(strRacPortNumber,nPos+1+2,16) '+2 to compensate 0x
Message = "Hex httpsPort value from cfgRacTuning = " &amp; strRacPortNumber
strRacPortNumber = HexToDec(strRacPortNumber)
Message = "Hex to Dec convert result in = " &amp; strRacPortNumber
Else
strRacPortNumber= Mid(strRacPortNumber,nPos+1,16)
Message = "RAC5Plus decimal number = " &amp; strRacPortNumber
End If
blsRacGen4Plus = 1
End If
Loop

oFile.close
'Clean up the CLI Output : Delete racGuid2.txt
rc = DelFile(filespec)
If rc &lt;&gt; 0 Then
Message = "Error! - DelFile " &amp; filespec
MOMDebugLog (Message)
End If
Set filespec = Nothing
Set oShell = Nothing
End If ' if blsRacInstalled = 1

If blsRacGen4Plus = 1 Then
strRacUrl = "https://" &amp; strRacIpAddress &amp; ":" &amp; strRacPortNumber
Else
strRacUrl = "https://" &amp; strRacIpAddress
End If

RacAgent = blsRacInstalled
RacUrl = strRacUrl

If Err &lt;&gt; 0 Then
RunRacUrl = Err.Number
Err.Clear
End If
End Function


'*****************************************************************
'GetPathParameter - Common to RunRacUrl and ExecRacUrl
'Routine to get RACADM path and drive letter
' Arguments: Racadm path for executable and drive letter of installation
'*****************************************************************
Function GetPathParameter(ByRef o_racpath, ByRef o_drive)
On Error Resume Next
Dim rac_path, drive_letter
rc = GetRACADMPath(rac_path)
If rc &lt;&gt; 0 Then
Message = "GetPathParameter:GetRACADMPath Error - " &amp; rc
MOMDebugLog (Message)
RacExitFlag = 1
Err.Clear
Exit Function
Else
Message = "GetPathParameter:GetRACADMPath - " &amp; rac_path
End If

rc = GetRACInstallRoot(drive_letter, rac_path)
If rc &lt;&gt; 0 Then
Message = "GetPathParameter:GetRACInstallRoot Error - " &amp; rc
MOMDebugLog (Message)
RacExitFlag = 1
Err.Clear
Exit Function
Else
Message = "GetPathParameter:GetRACInstallRoot - " &amp; drive_letter
End If

If RegError = 1 Then
Message = "RAC Hardware / Agent not installed on Server"
MOMDebugLog (Message)
RacExitFlag = 1
Err.Clear
Exit Function
End If

o_racpath = rac_path
o_drive = drive_letter

If Err &lt;&gt; 0 Then
GetPathParameter = Err.Number
Err.Clear
End If
End Function

'*************************************************************************
' Function : GetRACInstallRoot()
' Desc : To determine RAC Install Drive
' Arguments : ByRef, driveletter and RACadmPath
'*************************************************************************
Private Function GetRACInstallRoot(ByRef path, ByVal RACInstallPath)
On Error Resume Next
' Return the root drive of the OMInstall Path
path = Left(RACInstallPath, 2)
If Err &lt;&gt; 0 Then
GetRACInstallRoot = Err.Number
Err.Clear
End If
End Function

'*****************************************************************
'GetTempFolderPath
'Routine to Get Win Temp Folder path
'*****************************************************************
Function GetTempFolderPath(ByRef WinTempFolder, ByVal drive_letter)
On Error Resume Next
Dim FldrExistFlag, fso
FldrExistFlag = False
dim wshShell : Set wshShell = Createobject("WScript.Shell")
dim wshSysEnv : Set wshSysEnv = wshShell.Environment
dim strSysTempFolder : strSysTempFolder = wshSysEnv("TEMP")
dim wshPrcEnv : Set wshPrcEnv = wshShell.Environment("Process")
strSysTempFolder = Replace(strSysTempFolder, "%SystemRoot%", wshPrcEnv("SYSTEMROOT"), 1, -1, vbTextCompare)
WinTempFolder = strSysTempFolder

Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FolderExists(WinTempFolder)) Then
FldrExistFlag = True
Else
FldrExistFlag = False
End If
If WinTempFolder = "" OR FldrExistFlag = False Then
WinTempFolder = drive_letter
End If
Message = "Current CLI output will be stored in Folder - " &amp; WinTempFolder

Set wshShell = Nothing
Set wshSysEnv = Nothing
Set strSysTempFolder = Nothing
Set wshPrcEnv = Nothing

If Err &lt;&gt; 0 Then
GetTempFolderPath = Err.Number
Err.Clear
End If
End Function

'*****************************************************************
'GetRACFileGUID
'Routine to generate 2 unique GUIDs for ip and port info files
' Used to serve concurrency file access by different modules
'*****************************************************************
Function GetRACFileGUID(ByRef guid3, ByRef guid4)
On Error Resume Next
Dim TypeLib, NewGUID
Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
guid3 = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing

Set TypeLib = CreateObject("Scriptlet.TypeLib")
NewGUID = TypeLib.Guid
guid4 = (left(NewGUID, len(NewGUID)-2))
Set TypeLib = Nothing
End Function

'*****************************************************************
'GetRacadmPath
'Routine to read the registry to query the OMSA Install Path
'*****************************************************************
Function GetRACADMPath(ByRef o_sPath)
On Error Resume Next
Const DEF_RACADM_PATH = "C:\Program Files\Dell\OpenManage\RAC\MN"
Const RACADM_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\OpenManage\Remote Access Card Managed Node\PATH"
Const RACADM64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432node\Dell Computer Corporation\OpenManage\Remote Access Card Managed Node\PATH"
Const REM_RACADM_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Dell Computer Corporation\OpenManage\Remote Access Card Management Station\Path"
Const REM_RACADM64_REG_INTALL_PATH = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Dell Computer Corporation\OpenManage\Remote Access Card Management Station\Path"
Dim strRacadmKey, tmp

strRacadmKey = RACADM_REG_INTALL_PATH
Set oShell = CreateObject ("WScript.Shell")
o_sPath = ""
o_sPath = oShell.RegRead(strRacadmKey)

If o_sPath = "" Then
o_sPath = oShell.RegRead(RACADM64_REG_INTALL_PATH)
If Err &lt;&gt; 0 Then
Err.Clear
End If
End If
If o_sPath = "" Then
o_sPath = oShell.RegRead(REM_RACADM_REG_INTALL_PATH)
If Err &lt;&gt; 0 Then
Err.Clear
End If
End If
If o_sPath = "" Then
o_sPath = oShell.RegRead(REM_RACADM64_REG_INTALL_PATH)
If Err &lt;&gt; 0 Then
Err.Clear
End If
End If

If o_sPath = "" Then
tmp = DEF_RACADM_PATH &amp; "\racadm.exe"
If(bFileExists(tmp)) Then
o_sPath = DEF_RACADM_PATH
Message = "RACADM Registry is empty, Using Default Path" &amp; DEF_RACADM_PATH
MOMDebugLog (Message)
Err.Clear
Else
RegError = 1
End If
End If
If Err &lt;&gt; 0 Then
GetRACADMPath = Err.Number
Err.Clear
End If
Set oShell = Nothing
End Function

'*****************************************************************
' ExecRacUrl
' Routine to Exec Cmd and Read From Standard Output
'*****************************************************************
Function ExecRacUrl(ByRef RacAgent, ByRef RacUrl)
On Error Resume Next
blsRacInstalled = 0 ' IP address Existence
blsRacGen4Plus = 0 ' Port Existence (subset of RacInstalled)
RegError = 0
a = 0
b = 0
Command10 = "racadm.exe getconfig -g cfgCurrentLanNetworking"
Command11 = "racadm.exe getconfig -g cfgLanNetworking"
Command2 = "racadm.exe getconfig -g cfgRacTuning"
Command3 = "racadm.exe getconfig -g idRacInfo"

GetPathParameter RacPath, drive
If RacExitFlag = 1 Then
ExecRacUrl = -1
Err.Clear
Exit Function
End If

Set WshShell = CreateObject("WScript.Shell")
Command3 = RacPath &amp; "\" &amp; Command3
Message = "ExecRacUrl: Cmd for RACType - " &amp; Command3
Dim timer
Const TIMEOUT = 20
timer = 0
Set oShell = WshShell.Exec(Command3)
Do While oShell.Status = 0
WScript.Sleep(1000)
timer = timer + 1
if (timer &gt; TIMEOUT) Then
Message = "Exit ExecCmd. Reason: RACADM idRacInfo not responding"
MOMDebugLog (Message)
oShell.Terminate()
Exit Do
End If
Loop
Set objStdOut = oShell.StdOut
If Not oShell.StdErr.AtEndOfStream Then
RacadmErrStream = "STDERR: " + oShell.StdErr.ReadAll
Message = "RACADM Standard Error - " &amp; RacadmErrStream
MOMDebugLog (Message)
ExecRacUrl = -1
Err.Clear
Exit Function
Else
Do While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for RACType " &amp; strLine
MOMDebugLog (Message)
ExecRacUrl = -1
Err.Clear
Exit Function
ElseIf Instr(LCase(strLine),Lcase("idRacType")) Then
nPos = Instr(LCase(strLine), "=")
strRacType = Trim(strLine)
strRacType = Mid(strRacType,nPos+1,5)
strRacType = Trim(strRacType)
blsRacType = 1
Message = "Detected DRAC Type (hex)= " &amp; strRacType
End If
Loop
End If

oShell.Terminate()
Set oShell = Nothing
Set WshShell = Nothing

If blsRacType = 1 Then
'----DF547162-Fail to show Server Attribute RAC URL for iDRAC7 Express
'If Instr(Lcase(strRacType),"3") OR Instr(Lcase(strRacType),"4") OR Instr(Lcase(strRacType),"5") OR Instr(Lcase(strRacType),"7")Then
'--------
If StrComp(Lcase(strRacType),"3") = 0 OR StrComp(Lcase(strRacType),"4") = 0 OR StrComp(Lcase(strRacType),"5") = 0 OR StrComp(Lcase(strRacType),"7") = 0 Then
'Method1 for DRAC4 or below
Set WshShell = CreateObject("WScript.Shell")
Command10 = RacPath &amp; "\" &amp; Command10
Message = "ExecRacUrl: Cmd for IPAddress (DRAC4 or lesser) - " &amp; Command10
timer = 0
Set oShell = WshShell.Exec(Command10)
Do While oShell.Status = 0
WScript.Sleep(1000)
timer = timer + 1
if (timer &gt; TIMEOUT) Then
Message = "Exit ExecCmd. Reason: RACADM cfgCurrentlanNetworking not responding "
MOMDebugLog (Message)
oShell.Terminate()
Exit Do
End If
Loop
Set objStdOut = oShell.StdOut

Do While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for IPaddr (DRAC4 or lesser)" &amp; strLine
MOMDebugLog (Message)
ExecRacUrl = -1
Err.Clear
Exit Function
End If
If Instr(LCase(strLine),Lcase("cfgNicCurrentIpAddress")) Then
nPos = Instr(LCase(strLine), "=")
strRacIpAddress = Trim(strLine)
strRacIpAddress = Mid(strRacIpAddress,nPos+1,16)
blsRacInstalled = 1
End If
Loop

oShell.Terminate()
Set oShell = Nothing
Set WshShell = Nothing
'------DF547162-Fail to show Server Attribute RAC URL for iDRAC7 Express
'ElseIf (Instr(Lcase(strRacType),"6") OR Instr(Lcase(strRacType),"8") OR Instr(Lcase(strRacType),"10") OR Instr(Lcase(strRacType),"11")) Then
'-------
ElseIf (StrComp(Lcase(strRacType),"6") = 0 OR StrComp(Lcase(strRacType),"8") = 0 OR StrComp(Lcase(strRacType),"10") = 0 OR StrComp(Lcase(strRacType),"11") = 0 OR StrComp(Lcase(strRacType),"16") = 0 OR StrComp(Lcase(strRacType),"17") = 0 OR StrComp(Lcase(strRacType),"32") = 0 OR StrComp(Lcase(strRacType),"33") = 0 OR StrComp(Lcase(strRacType),"34") = 0) Then
'Method2 - If case where DRAC5 and later (iDRAC inclusive)
Set WshShell2 = CreateObject("WScript.Shell")
Command11 = RacPath &amp; "\" &amp; Command11
Message = "ExecRacUrl: Cmd for IPAddress (DRAC5/iDRAC) - " &amp; Command11
timer = 0
Set oShell2 = WshShell2.Exec(Command11)
Do While oShell2.Status = 0
WScript.Sleep(1000)
timer = timer + 1
if (timer &gt; TIMEOUT) Then
Message = "Exit ExecCmd. Reason: RACADM cfgLanNetworking not responding "
MOMDebugLog (Message)
oShell.Terminate()
Exit Do
End If
Loop
Set objStdOut2 = oShell2.StdOut
Do While Not objStdOut2.AtEndOfStream
strLine = objStdOut2.ReadLine
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for IPaddr " &amp; strLine
MOMDebugLog (Message)
ExecRacUrl = -1
Err.Clear
Exit Function
End If
If Instr(LCase(strLine),Lcase("cfgNicIpAddress")) Then
nPos = Instr(LCase(strLine), "=")
strRacIpAddress = Trim(strLine)
strRacIpAddress = Mid(strRacIpAddress,nPos+1,16)
blsRacInstalled = 1
End If
Loop

oShell2.Terminate()
Set oShell2 = Nothing
Set WshShell2 = Nothing
Else ' When DRAC Type is nether 3,4,5,6,7
Message = "Unsupported DRAC Type = " &amp; strRacType
MOMDebugLog (Message)
End If
End If
'''
Set oShell = Nothing
Set objStdOut = Nothing

If blsRacInstalled = 1 Then
' If Command10 runs and IpAddress was found
Set WshShell = CreateObject("WScript.Shell")
Command2 = RacPath &amp; "\" &amp; Command2
Message = "ExecRacUrl: Cmd for PortNumber - " &amp; Command2
timer = 0
Set oShell = WshShell.Exec(trim(Command2))
Do While oShell.Status = 0
WScript.Sleep(1000)
timer = timer + 1
if (timer &gt; TIMEOUT) Then
Message = "Exit ExecCmd. Reason: RACADM port cmd not responding "
MOMDebugLog 1, Message
oShell.Terminate()
Exit Do
End If
Loop
Set objStdOut = oShell.StdOut

Do While Not objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
If Instr(Lcase(strLine),"error") Then
RacAgent = 0
Message = "Error in Racadm Output for Port " &amp; strLine
MOMDebugLog 1, Message
Err.Clear
Exit Function
End If
If Instr(LCase(strLine),LCase("cfgRacTuneHttpsPort")) Then
nPos = Instr(LCase(strLine), "=")
strRacPortNumber= Trim(strLine)
If Instr(strRacPortNumber,"0x") Then
strRacPortNumber= Mid(strRacPortNumber,nPos+1+2,16) '+2 to compensate 0x
Message = "Hex httpsPort value from cfgRacTuning = " &amp; strRacPortNumber
strRacPortNumber = HexToDec(strRacPortNumber)
Message = "Hex to Dec convert result in = " &amp; strRacPortNumber
Else
strRacPortNumber= Mid(strRacPortNumber,nPos+1,16) '
Message = "RAC5Plus Decimal Port = " &amp; strRacPortNumber
End If
blsRacGen4Plus = 1
End If
Loop

oShell.Terminate()
Set oShell = Nothing
Set WshShell = Nothing

If blsRacGen4Plus = 1 Then
strRacUrl = "https://" &amp; strRacIpAddress &amp; ":" &amp; strRacPortNumber
Else
strRacUrl = "https://" &amp; strRacIpAddress
End If
End If ' If blsRacInstalled = 1

RacAgent = blsRacInstalled
RacUrl = strRacUrl

Set objStdOut = Nothing
If Err &lt;&gt; 0 Then
ExecRacUrl = Err.Number
Message = "ExecRACUrl ErrorNo= " &amp; Err.No &amp; ", Description: " &amp; Err.Desc
MOMDebugLog (Message)
Err.Clear
End If
End Function


'*****************************************************************
' HexToDec
' Routine to Convert Hex Number to Decimal value
'*****************************************************************
Function HexToDec(ByVal Number)
On Error Resume Next
Dim lngResult,intIndex
Dim strDigit, intDigit, intValue
lngResult=0
For intIndex=len(Number) to 1 step -1
strDigit=Mid(Number,intIndex,1)
intDigit=Instr("0123456789ABCDEF",ucase(strDigit))-1
If intDigit&gt;=0 Then
intValue=intDigit*(16^(len(Number)-intIndex))
lngResult=lngResult+intValue
Else
lngResult=0
int intIndex=0
End If
Next
Number=Trim(lngResult)
HexToDec = Number
End Function

'*****************************************************************
'bFileExists
'Routine to determine if the OMSA Report file is created
'*****************************************************************
Function bFileExists(ByVal filespec1)
On Error Resume Next
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
bFileExists = (fso.FileExists(filespec1))
Set fso = Nothing
End Function

'**********************************************************
' CheckVBScriptEngine()
' Check VBScript engine version:
'**********************************************************
Function CheckVBScriptEngine()
On Error Resume Next
Dim bIsCompatV, var
Const VBSCRIPT_MIN_VERSION = 56
var = ((ScriptEngineMajorVersion * 10) + ScriptEngineMinorVersion)
If ((var) &lt; VBSCRIPT_MIN_VERSION) Then
bIsCompatV = False
Else
bIsCompatV = True
End If
If Err &lt;&gt; 0 Then
CheckVBScriptEngine = Err.Number
Err.Clear
Else
CheckVBScriptEngine = bIsCompatV
End If
End Function

' *** Add double query fix

' Function to retrieve the object
' Modified Function to just check the handler is null or not
Function GetObjectSetMod(ByRef objDellConnection, SelectQuery, objName)
Dim retry, RetryFlag, logMessage
On Error Resume Next
RetryFlag = False
For retry = 0 To 1
MOMDebugLog 1, "Retrying for " &amp; retry &amp; " time..."
Set GetObjectSetMod = objDellConnection.ExecQuery(SelectQuery)
If (GetObjectSetMod is Nothing) Or (IsNull(GetObjectSetMod)) Then
logMessage = "INFO: Unable to retrieve " &amp; objName &amp; " Attributes"
MOMDebugLog 1, logMessage
WScript.Sleep(1000)
RetryFlag = True
Else
Exit For
End If
Next
End Function

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 " &amp; retry &amp; " time..."
Set GetObjectSet = objDellConnection.ExecQuery(SelectQuery)
LogErrorNumber(objName)
If (GetObjectSet is Nothing) Or (IsNull(GetObjectSet)) Then
logMessage = "INFO: Unable to retrieve " &amp; objName &amp; " Attributes"
MOMDebugLog 1, logMessage
WScript.Sleep(1000)
RetryFlag = True
Else
logMessage= "INFO: " &amp; objName &amp; " 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) &lt;= 0 Then
MOMDebugLog 1, Attribute &amp; " 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 &lt;&gt; 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 " &amp; objName
logMessage = logMessage &amp; " Err Number:" &amp; Err.Number
logMessage = logMessage &amp; " Err Descr:" &amp; Err.Description
End Select
MOMDebugLog 1, "ERROR: " &amp; 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>