You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
335 lines
9.5 KiB
335 lines
9.5 KiB
REM =================================================================================
|
|
REM
|
|
REM IIS_SWITCH <Cluster_Name> [<group_name>]
|
|
REM
|
|
REM
|
|
REM Replace IIS resources (Web and FTP) with generic scripts.
|
|
REM Note: If you chose to replace all groups, then the resource types that are
|
|
REM not supported by Windows Server 2003 will also be deleted by the script
|
|
REM
|
|
REM Copyright (c) 2001 Microsoft Corporation
|
|
REM
|
|
REM =================================================================================
|
|
|
|
Option Explicit
|
|
|
|
REM ---------------------------------------------------------------------------------
|
|
REM DeleteResourceTypes (objCluster)
|
|
REM
|
|
REM Delete the resource types that are not valid in Windows Server 2003
|
|
REM ---------------------------------------------------------------------------------
|
|
|
|
sub DeleteResourceTypes(objCluster)
|
|
|
|
Dim colTypes
|
|
Dim objType
|
|
Dim colRes
|
|
|
|
on error resume next
|
|
|
|
set colTypes = objCluster.ResourceTypes
|
|
|
|
REM Delete IIS resource type
|
|
set objType = colTypes.Item("IIS Server Instance")
|
|
set colRes = objType.Resources
|
|
if colRes.Count = 0 then
|
|
objType.Delete
|
|
end if
|
|
|
|
REM Delete SMTP resource type
|
|
set objType = colTypes.Item("SMTP Server Instance")
|
|
set colRes = objType.Resources
|
|
if colRes.Count = 0 then
|
|
objType.Delete
|
|
end if
|
|
|
|
REM Delete NNTP resource type
|
|
set objType = colTypes.Item("NNTP Server Instance")
|
|
set colRes = objType.Resources
|
|
if colRes.Count = 0 then
|
|
objType.Delete
|
|
end if
|
|
|
|
end sub
|
|
|
|
REM ---------------------------------------------------------------------------------
|
|
REM SwitchResource (objOld, objNew)
|
|
REM
|
|
REM Switch old object out of the tree and put in the new object
|
|
REM Rebuild all the dependencies
|
|
REM ---------------------------------------------------------------------------------
|
|
|
|
sub SwitchResource(objOld, objNew)
|
|
|
|
Dim colOldDeps
|
|
Dim colNewDeps
|
|
Dim objDep
|
|
|
|
REM Switch out the dependent resources
|
|
REM
|
|
set colOldDeps = objOld.Dependents
|
|
set colNewDeps = objNew.Dependents
|
|
for each objDep in colOldDeps
|
|
colOldDeps.RemoveItem objDep.Name
|
|
colNewDeps.AddItem objDep
|
|
next
|
|
|
|
REM Switch out the dependencies
|
|
REM
|
|
set colOldDeps = objOld.Dependencies
|
|
set colNewDeps = objNew.Dependencies
|
|
for each objDep in colOldDeps
|
|
colOldDeps.RemoveItem objDep.Name
|
|
colNewDeps.AddItem objDep
|
|
next
|
|
|
|
end Sub
|
|
|
|
REM ---------------------------------------------------------------------------------
|
|
REM CreateGenScript(objGroup, strName, web)
|
|
REM
|
|
REM Routine to create a generic script resource in a specific group
|
|
REM ---------------------------------------------------------------------------------
|
|
|
|
Function CreateGenScript(objGroup, strName, web)
|
|
|
|
Dim colResources
|
|
Dim objResource
|
|
Dim colPrivateProps
|
|
Dim strScript
|
|
|
|
if web then
|
|
strScript = "%windir%\system32\inetsrv\clusweb.vbs"
|
|
else
|
|
strScript = "%windir%\system32\inetsrv\clusftp.vbs"
|
|
end if
|
|
|
|
set colResources = objGroup.Resources
|
|
set objResource = colResources.CreateItem(strName, "Generic Script", 0)
|
|
set colPrivateProps = objResource.PrivateProperties
|
|
colPrivateProps.CreateItem "ScriptFilepath", strScript
|
|
colPrivateProps.SaveChanges
|
|
|
|
set CreateGenScript = objResource
|
|
|
|
end Function
|
|
|
|
REM ---------------------------------------------------------------------------------
|
|
REM UpgradeIIS(objCluster, objGroup)
|
|
REM
|
|
REM Routine to upgrade all Web and FTP resources to Windows Server 2003 resource
|
|
REM ---------------------------------------------------------------------------------
|
|
|
|
Sub UpgradeIIS(objCluster, objGroup)
|
|
|
|
DIM colResources
|
|
DIM objResource
|
|
DIM objNewResource
|
|
DIM colPrivateProps
|
|
DIM objProp
|
|
DIM resName
|
|
DIM boolWeb
|
|
DIM oldState
|
|
|
|
on error resume next
|
|
Err.Clear
|
|
|
|
REM Take the cluster group offline if it is online
|
|
REM it is not online or offline, return an error
|
|
REM
|
|
oldState = objGroup.state
|
|
|
|
if objGroup.state = 0 then
|
|
objGroup.offline 5000
|
|
end if
|
|
|
|
if objGroup.state = 3 then
|
|
objGroup.offline 5000
|
|
end if
|
|
|
|
do while objGroup.state = 4
|
|
sleep (5)
|
|
loop
|
|
|
|
if objGroup.state <> 1 then
|
|
wscript.echo "ERROR: The group '" + objGroup.Name + "' is not in a state to perform this operation"
|
|
wscript.quit(1)
|
|
end if
|
|
|
|
REM Find all IIS resources (Web and FTP) in the group
|
|
REM
|
|
set colResources = objGroup.Resources
|
|
for each objResource in colResources
|
|
|
|
REM Look for IIS resources
|
|
REM
|
|
if objResource.TypeName = "IIS Server Instance" then
|
|
|
|
resName = objResource.Name
|
|
|
|
REM Figure out whether it is an FTP resource or a Web resource
|
|
REM
|
|
set colPrivateProps = objResource.PrivateProperties
|
|
set objProp = colPrivateProps.Item("ServiceName")
|
|
boolWeb = (objProp.Value = "W3SVC")
|
|
|
|
REM Rename the old resource
|
|
REM
|
|
objResource.Name = resName + " (W2K)"
|
|
|
|
REM Switch out the old resource and plumb in the new one
|
|
REM
|
|
set objNewResource = CreateGenScript(objGroup, resName, boolWeb)
|
|
SwitchResource objResource, objNewResource
|
|
|
|
REM Now delete the old resource and print out a message (assuming nothing broke)
|
|
REM
|
|
if Err.Number = 0 then
|
|
|
|
objResource.Delete
|
|
|
|
if boolWeb then
|
|
wscript.echo "INFO: Upgraded IIS Web resource '" + resName + "'"
|
|
else
|
|
wscript.echo "INFO: Upgraded IIS FTP resource '" + resName + "'"
|
|
end if
|
|
|
|
else
|
|
|
|
REM Catch any errors that may have happened
|
|
REM
|
|
wscript.echo "ERROR: Failed to convert resource '" + resName + "': " + Err.Description
|
|
Err.Clear
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
next
|
|
|
|
REM Ok, move the group to the Whistler node and put it back in the
|
|
REM online state if it was there before
|
|
REM
|
|
if oldstate = 0 then
|
|
objGroup.Move 10000
|
|
objGroup.Online 0
|
|
end if
|
|
|
|
end Sub
|
|
|
|
REM ---------------------------------------------------------------------------------
|
|
REM UpgradeGroup(objCluster, objGroup)
|
|
REM
|
|
REM Routine to upgrade a single group
|
|
REM ---------------------------------------------------------------------------------
|
|
|
|
Sub UpgradeGroup(objCluster, objGroup)
|
|
|
|
DIM colResources
|
|
DIM objResource
|
|
DIM boolFound
|
|
DIM objProp
|
|
|
|
REM Figure out whether this group needs any work done to it
|
|
REM
|
|
boolFound = False
|
|
set colResources = objGroup.Resources
|
|
for each objResource in colResources
|
|
if objResource.TypeName = "IIS Server Instance" then
|
|
boolFound = True
|
|
end if
|
|
next
|
|
|
|
REM If we found an IIS resource, make sure it is not the cluster group
|
|
REM and then go upgrade it
|
|
REM
|
|
if boolFound then
|
|
|
|
set objResource = objCluster.QuorumResource
|
|
set objProp = objResource.Group
|
|
if objProp.Name = objGroup.Name then
|
|
|
|
wscript.echo "WARN: Skipping group '" + objProp.Name + "'"
|
|
wscript.echo " An IIS resource exists in the cluster group, this is not a supported configuration"
|
|
|
|
else
|
|
|
|
UpgradeIIS objCluster, objGroup
|
|
|
|
end if
|
|
|
|
end if
|
|
|
|
end Sub
|
|
|
|
REM ---------------------------------------------------------------------------------
|
|
REM main
|
|
REM
|
|
REM Main entry point for switch utility
|
|
REM Usage:
|
|
REM switch <cluster_name> [<group_name>]
|
|
REM ---------------------------------------------------------------------------------
|
|
|
|
sub main
|
|
|
|
Dim args
|
|
Dim objCluster
|
|
Dim objGroup
|
|
Dim colGroups
|
|
Dim colTypes
|
|
Dim objType
|
|
|
|
on error resume next
|
|
|
|
wscript.echo "Server Cluster (MSCS) upgrade script for IIS resources V1.0"
|
|
|
|
REM Check for the arguments
|
|
REM
|
|
set args = Wscript.Arguments
|
|
if args.count < 1 then
|
|
wscript.echo "Usage: iis_switch <cluster_name> [<group_name>]"
|
|
wscript.quit(1)
|
|
end if
|
|
|
|
REM Open a handle to the cluster
|
|
REM
|
|
Set objCluster = CreateObject("MSCluster.Cluster")
|
|
objCluster.Open (args(0))
|
|
if Err.Number <> 0 then
|
|
wscript.echo "ERROR: Unable to connect to cluster '" + args(0) + "': " + Err.Description
|
|
wscript.quit(1)
|
|
end if
|
|
|
|
REM Check that this script is being run on a node that has the generic script resource
|
|
REM i.e. a Windows Server 2003 cluster node
|
|
REM
|
|
set colTypes = objCluster.ResourceTypes
|
|
set objType = colTypes.Item("Generic Script")
|
|
if Err.Number <> 0 then
|
|
wscript.echo "ERROR: You must execute this script against a Windows Server 2003 node"
|
|
wscript.quit(1)
|
|
end if
|
|
|
|
REM Either upgrade all groups or just the specified group
|
|
REM
|
|
if args.count = 1 then
|
|
|
|
set colGroups = objCluster.ResourceGroups
|
|
for each objGroup in colGroups
|
|
UpgradeGroup objCluster, objGroup
|
|
next
|
|
|
|
else
|
|
|
|
set colGroups = objCluster.ResourceGroups
|
|
set objGroup = colGroups.Item(args(1))
|
|
UpgradeGroup objCluster, objGroup
|
|
|
|
end if
|
|
|
|
REM delete the resource types that are no longer supported
|
|
DeleteResourceTypes objCluster
|
|
|
|
end sub
|
|
|
|
main()
|