Dim IPAddress, CommunityString, Version, Timeout, Interval, LogLevel
Dim ProdName, Short_Product_Name, Description, Manufacturer, Chassis_Tag
Dim OOB_URL, Chassis_Name, Service_Tag, Product_Type, Firmware_Version, CMC_Version, UID
Dim SNMPSuccess, strErrorCode, logMessage, DeviceKey, AssetTag
Dim oAPI, oDiscoveryData, oInstance, oInstance1, oInstance2, oRelationship
Dim SourceId, ManagedEntityId,ChassisType
Dim Classifier, regHostName
Dim AttrMap, ValueMap
Dim oArgs
Dim fileSize, strOutFile, objLogFSO, objLogTextFile, strFileName
Set oArgs = WScript.Arguments
InitLookups()
GetArguments()
InitLogging()
MOMDebugLog 1,"Display the Content in HashMaps for Debugging."
MOMDebugLog 1,"--------------------Attribute MAP------------------"
DisplayMap(AttrMap)
MOMDebugLog 1,"--------------------Value Map-----------------------"
DisplayMap(ValueMap)
'Classify if the received IP is a CMC or a DRAC/MC
Classifier = ChassisClassifer()
MOMDebugLog 1, "Received IP is a " & Classifier
MOMDebugLog 1, "Creating oDiscoveryData(" & ValueMap.Item("SourceId") & "," & ValueMap.Item("ManagedEntityId") & ")"
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oDiscoveryData = oAPI.CreateDiscoveryData(0,ValueMap.Item("SourceId"),ValueMap.Item("ManagedEntityId"))
' Filter IP that is not CMC or DRAC/MC
If StrComp(Classifier, "Dell.ModularChassis.CMC") = 0 OR StrComp(Classifier, "Dell.ModularChassis.DRACMC") = 0 OR StrComp(Classifier, "Dell.ModularChassis.M1000E") = 0 OR StrComp(Classifier, "Dell.ModularChassis.VRTX") = 0 OR StrComp(Classifier, "Dell.ModularChassis.FX2") = 0 Then
Else
MOMDebugLog 1, "It is not a CMC or DRAC/MC."
EmptyDiscovery()
Wscript.Quit(0)
End If
'Do not discover empty ServiceTag/ChassisTag, Coz we can not have empty Key
Dim rmEmptyUID
rmEmptyUID = ValueMap.Item("Chassis_Tag")
If (StrComp(rmEmptyUID, "") = 0) OR (StrComp(rmEmptyUID, "Not Available") = 0) Then
MOMDebugLog 1, "UID Can not be null. Hence, can not discover:" & ValueMap.Item("IPAddress")
EmptyDiscovery()
Wscript.Quit(0)
End If
MOMDebugLog 1, "Getting Health Service hosted"
'Get Principal Name
regHostName = GetRegistryValue("HKEY_LOCAL_MACHINE\Software\Dell Computer Corporation\Dell Management Pack Suites\MSHostname")
If StrComp(Classifier, "Dell.ModularChassis.FX2") = 0 OR StrComp(Classifier, "Dell.ModularChassis.VRTX") = 0 OR StrComp(Classifier, "Dell.ModularChassis.M1000E") = 0 OR StrComp(Classifier, "Dell.ModularChassis.CMC") = 0 Then
CreateCMCHierarchy(Classifier)
Elseif StrComp(Classifier, "Dell.ModularChassis.DRACMC") = 0 Then
CreateDRACMCHierarchy()
Else
EmptyDiscovery()
Wscript.Quit(0)
End If
'##############################################
'Classify the network devices and the classifier name is the class name
Function ChassisClassifer
If StrComp(ValueMap.Item("Product_Type"), "8") = 0 Then
ChassisClassifer = "Dell.ModularChassis.M1000E"
elseif StrComp(ValueMap.Item("Product_Type"), "18") = 0 Then
ChassisClassifer = "Dell.ModularChassis.VRTX"
elseif StrComp(ValueMap.Item("Product_Type"), "19") = 0 Then
ChassisClassifer = "Dell.ModularChassis.FX2"
elseif (StrComp(ValueMap.Item("Short_Product_Name"), "DRAC/MC") = 0 ) And (InStr(ValueMap.Item("System_OID"), "1.3.6.1.4.1.674.10892.2") > 0 ) Then
ChassisClassifer = "Dell.ModularChassis.DRACMC"
else
ChassisClassifer = "Unknown"
end if
End Function
'##################################################
Function GetMSName
Dim StrRegKeyCompName, StrRegKeyTCPIP, WSHShell, StrHostname, StrDomainName, StrFQDN
StrRegKeyCompName = "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\"
StrRegKeyTCPIP = "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\"
Set WSHShell = CreateObject("WScript.Shell")
StrHostname = WSHShell.RegRead (StrRegKeyTCPIP & "Hostname")
StrDomainName = WSHShell.RegRead (StrRegKeyTCPIP & "Domain")
StrFQDN = StrHostName & "." & StrDomainName
GetMSName = StrFQDN
End Function
'##################################################
Function GetRegistryValue (strRegistryKey )
Dim WSHShell, value
On Error Resume Next
Set WSHShell = CreateObject("WScript.Shell")
value = WSHShell.RegRead( strRegistryKey )
If(strcomp(value,"") = 0) Then
value = GetMSName()
end if
set WSHShell = nothing
GetRegistryValue = value
End Function
'##################################################
Function PopulateAttrMap()
Do
ArgumentTemp = oArgs(ArgumentIterator)
if ((StrComp(ArgumentTemp,"#*#") = 0 ) or (StrComp(argumentTemp,"###") = 0 )) Then
if ((ArgumentCounter mod 2) = 0) Then
key = trim(ArgumentBuffer)
else
value = trim(ArgumentBuffer)
AddToValueMap key, value
end if
ArgumentBuffer = ""
ArgumentCounter = ArgumentCounter + 1
elseif (StrComp(ArgumentBuffer,"Not Available") = 0 ) Then
ArgumentBuffer = ArgumentTemp
else
ArgumentBuffer = ArgumentBuffer & " " & ArgumentTemp
end if
ArgumentIterator = ArgumentIterator + 1
Loop while Not(StrComp(argumentTemp,"###") = 0)
PopulateValueMap(AttrMap)
End Function
'##################################
Function InitLookups
Set AttrMap = CreateObject("Scripting.Dictionary")
PopulateAttrMap()
Set ValueMap = CreateObject("Scripting.Dictionary")
End Function
'###########################################
Function AddToValueMap(key, value)
Dim attrName
if(StrComp(Left(key, 3), "1.3") = 0 )Then
key = "." & key
End if
if AttrMap.Exists(key) Then
attrName = AttrMap.Item(key)
if StrComp(value, "") = 0 Then
value = "Not Available"
end if
if ValueMap.Exists(attrName) Then
ValueMap.Item(attrName) = value
else
ValueMap.Add attrName, value
end if
else
attrName = AttrMap.Item(key)
end If
End Function
'#####################################################
Function DisplayMap(ByRef map)
Dim i, cnt
cnt = 1
For each i in map.Keys
MOMDebugLog 1, cnt & ": Key: " & i & ", Value:" & map.Item(i)
cnt = cnt + 1
Next
End Function
'#####################################################
Function PopulateValueMap(ByRef map)
Dim value, cnt, key1
cnt = 0
value = "Not Available"
For each key1 in map.Items
If(ValueMap.Exists(key1) = false) Then
ValueMap.Add key1, value
End If
Next
End Function
'##############################################################
Function CreateCMCHierarchy(sClassifier)
Dim Location
logMessage = "INFO: Script - DellCMCDiscovery : CreateCMCHierarchy() - Start"
MOMDebugLog 1, logMessage
'create Dell.ModularChassis.CMC
logMessage = "INFO: Script - DellCMC Discovery : creating " + sClassifier + " Device"
MOMDebugLog 1, logMessage
Location = "AISLE:" & ValueMap.Item("Aisle") & ", RACK:" & ValueMap.Item("Rack") & ", Slot on Rack:" & ValueMap.Item("SlotOnRack")
If StrComp(sClassifier, "Dell.ModularChassis.M1000E") = 0 Then
Set oInstance1 = oDiscoveryData.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.M1000E']$")
ElseIf StrComp(sClassifier, "Dell.ModularChassis.VRTX") = 0 Then
Set oInstance1 = oDiscoveryData.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.VRTX']$")
ElseIf StrComp(sClassifier, "Dell.ModularChassis.FX2") = 0 Then
Set oInstance1 = oDiscoveryData.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.FX2']$")
ElseIf StrComp(sClassifier, "Dell.ModularChassis.CMC") = 0 Then
Set oInstance1 = oDiscoveryData.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.CMC']$")
End If
MOMDebugLog 1, "adding Microsoft.Windows.Computer.PrincipalName: " & regHostName
call oInstance1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", regHostName)
MOMDebugLog 1, "adding the display name to " & ValueMap.Item("IPAddress")
call oInstance1.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", ValueMap.Item("IPAddress"))
MOMDebugLog 1, "add key:" & ValueMap.Item("Service_Tag")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/ServiceTag$", ValueMap.Item("Service_Tag"))
MOMDebugLog 1, "adding the System Model name to " & ValueMap.Item("SystemModel")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/SystemModel$", ValueMap.Item("SystemModel"))
MOMDebugLog 1, "adding the Data Center Name to " & ValueMap.Item("DataCenterName")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/DataCenterName$", ValueMap.Item("DataCenterName"))
MOMDebugLog 1, "adding the Express Service Code to " & ValueMap.Item("ExpressServiceCode")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/ExpressServiceCode$", ValueMap.Item("ExpressServiceCode"))
MOMDebugLog 1, "adding the Express Service Code to " & ValueMap.Item("iKVMFirmwareVersion")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/iKVMFirmwareVersion$", ValueMap.Item("iKVMFirmwareVersion"))
MOMDebugLog 1, "adding the Aisle value to " & ValueMap.Item("Aisle")
MOMDebugLog 1, "adding the Rack value to " & ValueMap.Item("Rack")
MOMDebugLog 1, "adding the Slot on Rack to " & ValueMap.Item("SlotOnRack")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/Location$", Location)
MOMDebugLog 1, "add ipaddress:" & ValueMap.Item("IPAddress")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/IPAddress$", ValueMap.Item("IPAddress"))
MOMDebugLog 1, "add CommunityString:" & ValueMap.Item("CommunityString")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/CommunityString$", ValueMap.Item("CommunityString"))
MOMDebugLog 1, "add Service_Tag:" & ValueMap.Item("Service_Tag")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/UID$", ValueMap.Item("Service_Tag"))
MOMDebugLog 1, "add DeviceKey:" & ValueMap.Item("IPAddress")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/DeviceKey$", ValueMap.Item("IPAddress"))
MOMDebugLog 1, "add ProdName:"& ValueMap.Item("ProdName")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/ProdName$", ValueMap.Item("ProdName"))
MOMDebugLog 1, "add ShortProductName"& ValueMap.Item("Short_Product_Name")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/ShortProductName$", ValueMap.Item("Short_Product_Name"))
MOMDebugLog 1, "add Description:" & ValueMap.Item("Description")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/Description$", ValueMap.Item("Description"))
MOMDebugLog 1, "add Manufacturer:" & ValueMap.Item("Manufacturer")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/Manufacturer$", ValueMap.Item("Manufacturer"))
MOMDebugLog 1, "add CMC_Version: " & ValueMap.Item("CMC_Version")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/Version$", ValueMap.Item("CMC_Version"))
MOMDebugLog 1, "add ooburl:" & ValueMap.Item("OOB_URL")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/OOBURL$", ValueMap.Item("OOB_URL"))
MOMDebugLog 1, "add name:" & ValueMap.Item("Chassis_Name")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/ChassisName$", ValueMap.Item("Chassis_Name"))
MOMDebugLog 1, "add firmware:" & ValueMap.Item("Firmware_Version")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/Firmware$", ValueMap.Item("Firmware_Version"))
MOMDebugLog 1, "add AssetTag:" & ValueMap.Item("AssetTag")
call oInstance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/AssetTag$", ValueMap.Item("AssetTag"))
Set oInstance2 = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.CMC.NetworkDevice']$")
call oInstance2.AddProperty("$MPElement[Name='NetworkDevice!Microsoft.SystemCenter.NetworkDevice']/IPAddress$", ValueMap.Item("IPAddress"))
oDiscoveryData.AddInstance oInstance1
oDiscoveryData.AddInstance oInstance2
logMessage = "INFO: Exiting CreateDRACMCHierarchy() "
MOMDebugLog 1, logMessage
End Function
'##############################################
'Create Sink object and return discovery data
Function EmptyDiscovery()
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.Sink']$")
call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "Dell Modular Chassis Sink")
call oInstance.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.Sink']/Name$", "DONTCARE")
oDiscoveryData.AddInstance oInstance
Call oAPI.Return(oDiscoveryData)
Set oDiscoveryData = Nothing
Set oAPI = Nothing
End Function
'##############################################
'Initialize log-file according to log-level
Function InitLogging()
' Begin Logheader
If logLevel <> 0 Then
strFileName = "Dell_ChassisRemoteAccess_Discovery_" & ValueMap.Item("IPAddress") & ".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
tFolder = tFolder & "\ChassisRemoteAccess_Logs"
If Not objLogFSO.FolderExists(tFolder) Then
objLogFSO.CreateFolder(tFolder)
End If
strOutFile = tFolder & "\" & strFileName
If Not objLogFSO.FileExists(strOutFile) Then
Set objLogTextFile = objLogFSO.CreateTextFile(strOutFile)
objLogTextFile.Close()
End If
fileSize = objLogFSO.GetFile(strOutFile).Size
If (fileSize > MaxFileSize) Then
Dim dateStr, datesuffix, timesuffix, subStrLoc, newFilename
dateStr = CDate(Now())
datesuffix = ( Year(dateStr)*100 + Month(dateStr) )*100 + Day(dateStr)
timesuffix = Right((Hour(dateStr)*100+Minute(dateStr))*100+Second(dateStr)+1e7, 6)
subStrLoc = Instr(1, strOutFile,".log")
newFilename = Mid(strOutFile,1,(subStrLoc-1))
newFilename = newFilename &"-"& datesuffix &"-"&timesuffix&".log"
objLogFSO.MoveFile strOutFile, newFilename
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForWriting, True)
Else
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForAppending, True)
End If
logMessage = "INFO: Script - DellCMCDiscovery : Start()"
MOMDebugLog 1, logMessage
Err.Clear
End If
End Function
Sub MOMDebugLog (ByVal debugLevel, ByVal Message)
On Error Resume Next
If (debugLevel > 0) and (debugLevel <= logLevel) Then
objLogTextFile.WriteLine(Now() & "-" & ValueMap.Item("IPAddress") & " ---- " & Message)
Err.Clear
End If
End Sub