Huomautus
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
The following scripting example shows how to set the MPIO Load Balancing policy via a script calling WMI:
Just to expand on the information below,
FOO | Failover Only |
RR | Round Robin |
RRwS | Round Robin with Subset |
LQD | Least Queue Depth |
WP | Weighted Paths |
'-----------------------------------------------------------------------------
'
' SET_LBP.vbs
'
' WScript which can be used to change MPIO Load Balance Policies on Windows 2008
'
' USAGE:
'
' SET_LBP.vbs <FOO | RR | RRwS | LQD | WP>
' Change to FOO: SET_LBP.vbs FOO
' Change to RR: SET_LBP.vbs RR
' Change to RRwS: SET_LBP.vbs RRwS
' Change to LQD: SET_LBP.vbs LQD
' Change to WP: SET_LBP.vbs WP
'
' Return value:
' Success: 0
' Failure: -1
'
'
'-----------------------------------------------------------------------------
'
' Function returning ALUA or nonALUA flag
'
Function aluaflag(theInstance)
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
Set objShare = objWMIService.Get("DSM_QueryLBPolicy_V2.InstanceName=" & _
"'"&theInstance&"'")
For Each objDsmPath in objShare.LoadBalancePolicy.DSM_Paths
aluaflag = objDsmPath.ALUASupport
Exit for
Next
End Function
Dim Usage
Usage = "USAGE:" & vbCrLf & _
" SET_LBP.vbs <FOO | RR | RRwS | LQD | WP>" & vbCrLf
'
' Make sure we have the correct number of arguments.
'
If ( WScript.Arguments.Count <>1 ) Then
WScript.StdOut.Write Usage
WScript.Quit -1
End If
'
' Extract the arguments.
'
Dim bFlag, BOOL, LBP, LBPath, LBPolicy, foo, rr, rrws, lqd, wp
Dim fooValue, rrValue, rrwsValue, lqdValue, wpValue
LBP = WScript.Arguments(0): foo = "FOO" : rr = "RR" : rrws = "RRwS" : lqd = "LQD" : wp = "WP"
fooValue = StrComp(LBP, foo, 1)
rrValue = StrComp(LBP, rr, 1)
rrwsValue = StrComp(LBP, rrws, 1)
lqdValue = StrComp(LBP, lqd, 1)
wpValue = StrComp(LBP, wp, 1)
' ----------FOO---------
If ( 0 = fooValue) Then
LBPolicy = 1
End If
' ----------RR---------
If ( 0 = rrValue ) Then
LBPolicy = 2
End If
' ----------RRwS---------
If ( 0 = rrwsValue ) Then
LBPolicy = 3
End If
' ----------LQD---------
If ( 0 = lqdValue ) Then
LBPolicy = 4
End If
' ----------WP---------
If ( 0 = wpValue ) Then
LBPolicy = 5
End If
If ( Err.Number = 0 ) Then
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
'
' Locate device
'
Set colSWbemObjectSet = objWMIService.InstancesOf("DSM_QueryLBPolicy_V2")
'
' Loop through all devices
'
For Each objSWbemObject In colSWbemObjectSet
'
' Set the boolean flag to FALSE
'
BOOL = 0
WScript.StdOut.Write "InstanceName= "& objSWbemObject.InstanceName & vbCrLf
'
' Flag for ALUA LUN
'
bFlag = aluaflag(objSWbemObject.InstanceName)
'
' If ALUA=True and LBPolicy=RoundRobin, don't apply the change
'
Do
if LBPolicy = 2 Then
if bFlag > 0 Then Exit Do:
End if
'
' Set boolean flag to TRUE if ALUA
'
if bFlag > 0 Then
BOOL = 1
End if
'
'Assign each WbemObject to LBPolicy object
'
Set objLBPolicy = objSWbemObject
'
' Obtain an instance of the the class using a key property value.
'
Set objShare = objWMIService.Get("DSM_LB_Operations.InstanceName=" & _
"'"&objSWbemObject.InstanceName&"'")
'
' Obtain an InParameters object specific to the method we are going to call.
'
Set objInParam = objShare.Methods_("DsmSetLoadBalancePolicyALUA").inParameters.SpawnInstance_()
'
' set to user-defined LB Policy
'
objLBPolicy.LoadBalancePolicy.LoadBalancePolicy = LBPolicy
Dim count
count = 0
'
' If LB Policy is set to FOO
'
' If it is the 1st path, Set to A/O
' If is is not the 1st Path, Set to A/U if ALUA or S/B if not ALUA
'
'
' else LB Policy is set to other than FOO
'
' If It is ALUA
' If TargetPortGroup State is A/O
' Set the associated paths to A/O
' If TargetPortGroup State is A/U
' Set the associated paths to A/U
'
' else It is not ALUA
' Set all paths to A/O
'
'
For Each objDSMPath In objLBPolicy.LoadBalancePolicy.DSM_Paths
if LBPolicy = 1 Then
if count = 0 Then
objDSMPath.PrimaryPath = 1
else
if BOOL = 1 Then
objDSMPath.OptimizedPath = 0
objDSMPath.PrimaryPath = 1
else
objDSMPath.OptimizedPath = 1
objDSMPath.PrimaryPath = 0
End if
End if
else
if BOOL = 1 Then
if objDSMPath.TargetPortGroup_State = 0 Then
objDSMPath.OptimizedPath = 1
objDSMPath.PrimaryPath = 1
else
objDSMPath.OptimizedPath = 0
objDSMPath.PrimaryPath = 1
End if
else
objDSMPath.PrimaryPath = 1
End if
End if
count = count + 1
Next
objInParam.Properties_.item("LoadBalancePolicy") = objLBPolicy.LoadBalancePolicy
WScript.StdOut.Write "DSM_LB_Operations.InstanceName=" & "'"& _
objSWbemObject.InstanceName & "'" & vbCrLf & vbCrLf
Set objOutParams = objWMIService.ExecMethod("DSM_LB_Operations.InstanceName=" & _
"'"&objSWbemObject.InstanceName&"'","DsmSetLoadBalancePolicyALUA", objInParam)
Loop Until True:
Next
If (LBPolicy = 5) Then
WScript.StdOut.Write "LB Policy has successfully changed to WP" & vbCrLf
End If
If (LBPolicy = 4) Then
WScript.StdOut.Write "LB Policy has successfully changed to LQD" & vbCrLf
End If
If (LBPolicy = 3) Then
WScript.StdOut.Write "LB Policy has successfully changed to RRwS" & vbCrLf
End If
If (LBPolicy = 2) Then
If(BOOL = 0) Then
WScript.StdOut.Write vbCrLf & "Found no applicable device for RR" & vbCrLf
else
WScript.StdOut.Write "LB Policy has successfully changed to RR" & vbCrLf
End If
End If
If (LBPolicy = 1) Then
WScript.StdOut.Write "LB Policy has successfully changed to FOO" & vbCrLf
End If
WScript.Quit 0
Else
'
' Something went wrong.
'
WScript.StdOut.Write "Failed to change LB Policy" & Err.Description & vbCrLf
WScript.Quit -1
End If
------------------------