'==========================================================================
' Main
'==========================================================================
Dim oAPI
Dim oDiscoveryData
Dim nlbRoleWqlQuery
Dim objNLBProvider
Dim objCIMV2Provider
Dim nlbDriverInstances
Dim nlbNodes
Dim nlbNode
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oDiscoveryData = oAPI.CreateDiscoveryData(0,SourceId,ManagedEntityId)
Set objCIMV2Provider = GetObject("winmgmts:\\" & PrincipalName & "\root\CIMV2")
'First of all check if the NLB driver is not disabled. If its disabled, it means that NLB could be installed but is disabled on this box.
Set nlbDriverInstances = objCIMV2Provider.ExecQuery("SELECT Name FROM Win32_SystemDriver WHERE Name='WLBS' AND StartMode='System'")
'If no instances of the driver were found with startup type set to System, exit this function
If nlbDriverInstances.Count = 0 Then
Call oAPI.Return(oDiscoveryData)
Exit Sub
End If
Set objNLBProvider = GetObject("winmgmts:\\" & PrincipalName & "\root\MicrosoftNLB")
Dim nodeQuery
nodeQuery = "SELECT * FROM MicrosoftNLB_Node WHERE ComputerName = '" & PrincipalName & "'"
Set nlbNodes = objNLBProvider.ExecQuery(nodeQuery)
On Error Resume Next
If nlbNodes.Count = 0 And Err.Number <> 0 Then
oDiscoveryData.IsSnapshot = false
Call oAPI.Return (oDiscoveryData)
oAPI.LogScriptEvent "DiscoverWindowsNLBCluster.vbs", 6103 , 2, "Failed to perform NLB cluster discovery due to a WMI error (" & Err.Description & "). Please ensure that the NLB WMI provider is working properly."
Exit Sub
End If
On Error Goto 0
For Each nlbNode in nlbNodes
Dim nlbRoleInstance
Dim networkConnectionName
Dim networkAdapterDeviceId
Dim clusterIP
Dim clusterMacAddress
Dim clusterDnsName
Dim nodeName
Dim dedicatedIPAddress
Dim hostPriority
Dim associators
Dim associator
Dim clusterAssociator
Dim networkAdapters
Dim clusterSubnetMask
Dim nlbClusterInstance
Dim nlbClusterContainNodeRel
Dim nlbNicInstance
Dim nlbClusterNodeContainNetworkAdapterRel
For Each associator in associators
If associator.SystemProperties_.Item("__CLASS") = "MicrosoftNLB_NodeSetting" Then
Set networkAdapters = objCIMV2Provider.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE GUID='" & associator.AdapterGuid & "'")
If networkAdapters.Count > 0 Then
Dim networkAdapter
Set networkAdapter = networkAdapters.ItemIndex(0)
networkConnectionName = networkAdapter.NetConnectionID
networkAdapterDeviceId = networkAdapter.DeviceID
End If
End If
If associator.SystemProperties_.Item("__CLASS") = "MicrosoftNLB_Cluster" Then
Dim clusterAssociators
Set clusterAssociators = associator.Associators_
For Each clusterAssociator in clusterAssociators
If clusterAssociator.SystemProperties_.Item("__CLASS") = "MicrosoftNLB_ClusterSetting" Then
clusterIP = clusterAssociator.ClusterIPAddress
clusterMacAddress = clusterAssociator.ClusterMACAddress
clusterDnsName = clusterAssociator.ClusterName
clusterSubnetMask = clusterAssociator.ClusterNetworkMask
End If
Next
End If
Next
Set nlbRoleInstance = oDiscoveryData.CreateClassInstance(nlbRoleClassName)
nlbRoleInstance.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$",PrincipalName
nlbRoleInstance.AddProperty "$MPElement[Name='System!System.Entity']/DisplayName$", PrincipalName & "(" & networkConnectionName & ")"
nlbRoleInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ServerRole']/NetworkConnectionName$", networkConnectionName
nlbRoleInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ServerRole']/NodeName$", nodeName
nlbRoleInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ServerRole']/ClusterIP$", clusterIP
nlbRoleInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ServerRole']/DedicatedIPAddress$", dedicatedIPAddress
nlbRoleInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ServerRole']/HostPriority$", hostPriority
Set nlbClusterInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.Cluster']$")
Set nlbClusterContainNodeRel = oDiscoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ClusterContainsServerRole']$")
Set nlbClusterNodeContainNetworkAdapterRel = oDiscoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ServerRoleContainsNetworkAdapter']$")