'==========================================================================
' Main
'==========================================================================
Dim oAPI
Dim oDiscoveryData
Dim nlbRoleWqlQuery
Dim objNLBProvider
Dim objCIMV2Provider
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
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']$")