Configuring Resources With the Failover Cluster Automation Server
[The Failover Cluster Automation Server is available for use in Windows Server 2008. It may be altered or unavailable in subsequent versions.]
The following example creates resources of different types, satisfying required private properties and required dependencies as necessary. The example consists of two separate files, CreateResource.vbs and CreateResource.wsf.
'---------------------------------------------------------------------
' CreateResource.vbs
' Global data and functions supporting CreateResource.wsf.
'---------------------------------------------------------------------
Option Explicit
' In CreateResource.wsf, each resource type assigns appropriate
' values to these global variables. The CreateResource function
' uses these values to parse the command-line arguments and assign
' values to the required private properties for a given resource type.
Public strResType, strSyntax
Public intBasicArgs, intMinArgs, intMaxArgs, intReqDeps
Public varPropNames, varPropValues, varReqDeps
Public Function CreateResource()
Dim objGroup, objNewRes, objResource, objProperties, objReqDeps, objCluster, objArgs
Dim strClusterName, strGroupName, strResName
Dim intCounter
Set objArgs = WScript.Arguments
If objArgs.Count < intMinArgs Or objArgs.Count > intMaxArgs Then
Wscript.Echo strSyntax
WScript.Quit
End If
strClusterName = objArgs(0)
strGroupName = objArgs(1)
strResName = objArgs(2)
' Load property values for required private properties
' into an array. The size of the array and the
' expected arguments are defined by the calling script.
For intCounter = 0 To objArgs.Count - intBasicArgs - 1
If IsNumeric( objArgs( intCounter + intBasicArgs )) Then
varPropValues(intCounter) = CLng(objArgs(intCounter + intBasicArgs))
Else
varPropValues(intCounter) = objArgs(intCounter + intBasicArgs)
End If
Next
Set objCluster = CreateObject("MSCluster.Cluster")
objCluster.Open strClusterName
Set objGroup = objCluster.ResourceGroups.Item(strGroupName)
Set objNewRes = objGroup.Resources.CreateItem(strResName, strResType, 0)
Set objReqDeps = objNewRes.Dependencies
' Look for resources already in the group that will satisfy the
' required dependencies specified in CreateResource.wsf.
' If a resource of the required type does not exist it
' will have to be created and added as a dependency by some
' other means.
For intCounter = 0 To intReqDeps - 1
For Each objResource In objGroup.Resources
If objResource.Type.Name = varReqDeps(intCounter) Then
objNewRes.Dependencies.AddItem objResource
Exit For
End If
Next
Next
Set objProperties = objNewRes.PrivateProperties
For intCounter = 0 To intMaxArgs - intBasicArgs - 1
objProperties.Item(varPropNames(intCounter)).Value = varPropValues(intCounter)
Next
objProperties.SaveChanges
Set objGroup = Nothing
Set objNewRes = Nothing
Set objProperties = Nothing
Set objReqDeps = Nothing
Set objCluster = Nothing
End Function
<?xml version="1.0" encoding="US-ASCII"?>
<!--==================================================================
; CreateResource.wsf (requires CreateResource.vbs to run!)
;
; Creates resources of different types. To create a resource of
; a given type, use the resource type name as a job ID. Each
; resource type will have a different syntax depending
; on its required private properties.
;
; Basic syntax:
; cscript //job:[object type] CreateResource.wsf cluster group resource prop1, prop2, ... , propN
;
; Refer to the syntax string in each job for specific commands.
===================================================================-->
<package>
<job id="File Share">
<!-- The following line references the MSCLUS type library. -->
<reference guid="{F2E606E0-2631-11D1-89F1-00A0C90D061E}" version="1.0"/>
<script language="VBScript" src="createresource.vbs"/>
<script language="VBScript">
<![CDATA[
Option Explicit
strResType = "File Share"
strSyntax = "cscript //job:" & Chr(39) & strResType & Chr(39) & _
" CreateResource.wsf cluster group resource " & _
"Path Sharename <Remarks> <ShareSubDirs>"
intBasicArgs = 3
intMinArgs = 5
intMaxArgs = 7
varPropNames = Array( "Path", "ShareName", "Remark", "ShareSubDirs" )
varPropValues = Array( "", "", "", 1 )
intReqDeps = 3
varReqDeps = Array( "Physical Disk", "IP Address", "Network Name" )
CreateResource
]]>
</script>
</job>
<job id="Generic Application">
<!-- The following line references the MSCLUS type library. -->
<reference guid="{F2E606E0-2631-11D1-89F1-00A0C90D061E}" version="1.0"/>
<script language="VBScript" src="createresource.vbs"/>
<script language="VBScript">
<![CDATA[
Option Explicit
strResType = "Generic Application"
strSyntax = "cscript //job:" & Chr(39) & strResType & Chr(39) & _
" CreateResource.wsf cluster group resource " & _
"CommandLine CurrentDirectory <InteractWithDesktop> <UseNetworkName>"
intBasicArgs = 3
intMinArgs = 5
intMaxArgs = 7
varPropNames = Array( "CommandLine", "CurrentDirectory", "InteractWithDesktop", "UseNetworkName" )
varPropValues = Array( "", "", 1, 0 )
intReqDeps = 1
varReqDeps = Array( "Network Name" )
CreateResource
]]>
</script>
</job>
<job id="Generic Service">
<!-- The following line references the MSCLUS type library. -->
<reference guid="{F2E606E0-2631-11D1-89F1-00A0C90D061E}" version="1.0"/>
<script language="VBScript" src="createresource.vbs"/>
<script language="VBScript">
<![CDATA[
Option Explicit
strResType = "Generic Service"
strSyntax = "cscript //job:" & Chr(39) & strResType & Chr(39) & _
" CreateResource.wsf cluster group resource " & _
"ServiceName <StartupParameters> <UseNetworkName>"
intBasicArgs = 3
intMinArgs = 4
intMaxArgs = 6
varPropNames = Array( "ServiceName", "StartupParameters", "UseNetworkName" )
varPropValues = Array( "", "", 0 )
intReqDeps = 1
varReqDeps = Array( "Network Name" )
CreateResource
]]>
</script>
</job>
<job id="IP Address">
<!-- The following line references the MSCLUS type library. -->
<reference guid="{F2E606E0-2631-11D1-89F1-00A0C90D061E}" version="1.0"/>
<script language="VBScript" src="createresource.vbs"/>
<script language="VBScript">
<![CDATA[
Option Explicit
strResType = "IP Address"
strSyntax = "cscript //job:" & Chr(39) & strResType & Chr(39) & _
" CreateResource.wsf cluster group resource " & _
"Address SubnetMask Network <EnableNetBIOS>"
intBasicArgs = 3
intMinArgs = 6
intMaxArgs = 7
varPropNames = Array( "Address", "SubnetMask", "Network", "EnableNetBIOS" )
varPropValues = Array( "", "", "", 1 )
intReqDeps = 0
varReqDeps = 0
CreateResource
]]>
</script>
</job>
<job id="Network Name">
<!-- The following line references the MSCLUS type library. -->
<reference guid="{F2E606E0-2631-11D1-89F1-00A0C90D061E}" version="1.0"/>
<script language="VBScript" src="createresource.vbs"/>
<script language="VBScript">
<![CDATA[
Option Explicit
strResType = "Network Name"
strSyntax = "cscript //job:" & Chr(39) & strResType & Chr(39) & _
" CreateResource.wsf cluster group resource " & _
"Name <RemapPipeNames>"
intBasicArgs = 3
intMinArgs = 4
intMaxArgs = 5
varPropNames = Array( "Name", "RemapPipeNames" )
varPropValues = Array( "", 0 )
intReqDeps = 1
varReqDeps = Array( "IP Address" )
CreateResource
]]>
</script>
</job>
<job id="Physical Disk">
<!-- The following line references the MSCLUS type library. -->
<reference guid="{F2E606E0-2631-11D1-89F1-00A0C90D061E}" version="1.0"/>
<script language="VBScript" src="createresource.vbs"/>
<script language="VBScript">
<![CDATA[
Option Explicit
strResType = "Physical Disk"
strSyntax = "cscript //job:" & Chr(39) & strResType & Chr(39) & _
" CreateResource.wsf cluster group resource " & _
"Signature(in decimal) <SkipChkdsk> <ConditionalMount>"
intBasicArgs = 3
intMinArgs = 4
intMaxArgs = 6
varPropNames = Array( "Signature", "SkipChkdsk", "ConditionalMount" )
varPropValues = Array( -1, 0, 1 )
intReqDeps = 0
varReqDeps = 0
CreateResource
]]>
</script>
</job>
<job id="Print Spooler">
<!-- The following line references the MSCLUS type library. -->
<reference guid="{F2E606E0-2631-11D1-89F1-00A0C90D061E}" version="1.0"/>
<script language="VBScript" src="createresource.vbs"/>
<script language="VBScript">
<![CDATA[
Option Explicit
strResType = "Print Spooler"
strSyntax = "cscript //job:" & Chr(39) & strResType & Chr(39) & _
" CreateResource.wsf cluster group resource " & _
"Path <Timeout>"
intBasicArgs = 3
intMinArgs = 4
intMaxArgs = 5
varPropNames = Array( "DefaultSpoolDirectory", "JobCompletionTimeout" )
varPropValues = Array( "", 160000 )
intReqDeps = 2
varReqDeps = Array( "Physical Disk", "Network Name" )
CreateResource
]]>
</script>
</job>
</package>