NLB クラスター検出プローブ

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$タイムアウト (秒)

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.

option explicit

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
Dim nlbDriverInstances
Dim nlbNodes
Dim nlbNode

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
Dim associators
Dim associator
Dim clusterAssociator
Dim networkAdapters
Dim clusterSubnetMask
Dim nlbClusterInstance
Dim nlbClusterContainNodeRel
Dim nlbNicInstance
Dim nlbClusterNodeContainNetworkAdapterRel

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>