NLB-kluster identifieringsavsökning

Microsoft.Windows.NetworkLoadBalancing.ClusterDiscovery.Probe (ProbeActionModuleType)

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityPublic
RunAsMicrosoft.Windows.NetworkLoadBalancing.PrivilegedAccount
InputTypeSystem.BaseData
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
Script ProbeAction Microsoft.Windows.ScriptDiscoveryProbe Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
TimeoutSecondsint$Config/TimeoutSeconds$Tidsgräns (sek)

Source Code:

<ProbeActionModuleType ID="Microsoft.Windows.NetworkLoadBalancing.ClusterDiscovery.Probe" Accessibility="Public" RunAs="Microsoft.Windows.NetworkLoadBalancing.PrivilegedAccount" Batching="false" PassThrough="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="NlbRoleClassName" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="NetworkCardClassName" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="SourceId" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="ComputerPrincipalName" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="Script" TypeID="Windows!Microsoft.Windows.ScriptDiscoveryProbe">
<ScriptName>DiscoverWindowsNLBCluster.vbs</ScriptName>
<Arguments>$Config/SourceId$ $Target/Id$ $Config/ComputerPrincipalName$ $Config/NlbRoleClassName$ $Config/NetworkCardClassName$</Arguments>
<ScriptBody><Script>'Copyright (c) Microsoft Corporation. All rights reserved.

SetLocale("en-us")

Dim SourceId
Dim ManagedEntityId
Dim PrincipalName
Dim nlbRoleClassName
Dim nlbClusterClassName
Dim networkCardClassName

SourceId = WScript.Arguments(0)
ManagedEntityId = WScript.Arguments(1)
PrincipalName = WScript.Arguments(2)
nlbRoleClassName = WScript.Arguments(3)
networkCardClassName = WScript.Arguments(4)

'==========================================================================
' Main
'==========================================================================

Call DiscoverInstances()

'==========================================================================
' FUNCTIONS
'==========================================================================

Sub DiscoverInstances()

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:\\" &amp; PrincipalName &amp; "\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:\\" &amp; PrincipalName &amp; "\root\MicrosoftNLB")

Dim nodeQuery

nodeQuery = "SELECT * FROM MicrosoftNLB_Node WHERE ComputerName = '" &amp; PrincipalName &amp; "'"

Set nlbNodes = objNLBProvider.ExecQuery(nodeQuery)

On Error Resume Next

If nlbNodes.Count = 0 And Err.Number &lt;&gt; 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 (" &amp; Err.Description &amp; "). 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

nodeName = nlbNode.Name
dedicatedIPAddress = nlbNode.DedicatedIPAddress
hostPriority = nlbNode.HostPriority

Set associators = nlbNode.Associators_

For Each associator in associators
If associator.SystemProperties_.Item("__CLASS") = "MicrosoftNLB_NodeSetting" Then

Set networkAdapters = objCIMV2Provider.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE GUID='" &amp; associator.AdapterGuid &amp; "'")

If networkAdapters.Count &gt; 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 &amp; "(" &amp; networkConnectionName &amp; ")"
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']$")

nlbClusterInstance.AddProperty "$MPElement[Name='System!System.Entity']/DisplayName$", clusterIP
nlbClusterInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.Cluster']/IPAddress$", clusterIP
nlbClusterInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.Cluster']/MacAddress$", clusterMacAddress
nlbClusterInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.Cluster']/DnsName$", clusterDnsName
nlbClusterInstance.AddProperty "$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.Cluster']/SubnetMask$", clusterSubnetMask

Set nlbClusterContainNodeRel = oDiscoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ClusterContainsServerRole']$")

nlbClusterContainNodeRel.Source = nlbClusterInstance
nlbClusterContainNodeRel.Target = nlbRoleInstance

oDiscoveryData.AddInstance nlbRoleInstance
oDiscoveryData.AddInstance nlbClusterInstance
oDiscoveryData.AddInstance nlbClusterContainNodeRel

If networkAdapters.Count &gt; 0 Then

Set nlbNicInstance = oDiscoveryData.CreateClassInstance(networkCardClassName)

nlbNicInstance.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$",PrincipalName
nlbNicInstance.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", networkAdapterDeviceId

Set nlbClusterNodeContainNetworkAdapterRel = oDiscoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Windows.NetworkLoadBalancing.ServerRoleContainsNetworkAdapter']$")

nlbClusterNodeContainNetworkAdapterRel.Source = nlbRoleInstance
nlbClusterNodeContainNetworkAdapterRel.Target = nlbNicInstance

oDiscoveryData.AddInstance nlbNicInstance
oDiscoveryData.AddInstance nlbClusterNodeContainNetworkAdapterRel

End If

Next

Call oAPI.Return (oDiscoveryData)

End Sub</Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="Script"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
<InputType>System!System.BaseData</InputType>
</ProbeActionModuleType>