965 lines
29 KiB
Plaintext
965 lines
29 KiB
Plaintext
' ----------------------------------------------------------------------------
|
|
'
|
|
' This file is part of the Microsoft COM+ Samples.
|
|
'
|
|
' Copyright (C) 1995-2000 Microsoft Corporation. All rights reserved.
|
|
'
|
|
' This source code is intended only as a supplement to Microsoft
|
|
' Development Tools and/or on-line documentation. See these other
|
|
' materials for detailed information regarding Microsoft code samples.
|
|
'
|
|
' THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
|
' KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
' IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
' PARTICULAR PURPOSE.
|
|
'
|
|
' ----------------------------------------------------------------------------
|
|
|
|
'****************************************************************************************************
|
|
' Filename: COMAdmin.vbs
|
|
'
|
|
' Description: VB Script that captures most of the functionality
|
|
' of the COM Explorer in a command line utility.
|
|
' COMAdmin
|
|
' [/add] [/delete] [/get] [/set]
|
|
' [/server "servername"] [/localhost*]
|
|
' [/application "applicationname"]
|
|
' [/component "componentname"]
|
|
' [/interface "interfacename"]
|
|
' [/method "methodname"]
|
|
' [/role "rolename"]
|
|
' [/user "username"]
|
|
'
|
|
' [/property "PropName_1;PropValue_1" "PropName_2;PropValue_2" . . . "PropName_n;PropValue_n"
|
|
'
|
|
' [/applicationfile "applicationfile" "installpath"]
|
|
' [/componentfile "componentfile" "type"] [/componentprogid "componentprogid"]
|
|
'****************************************************************************************************
|
|
|
|
'Get arguments
|
|
Dim objArgs
|
|
Set objArgs = WScript.Arguments
|
|
|
|
'Initialize local vars
|
|
Dim nextArg
|
|
Dim strTarget
|
|
Dim strTarget2
|
|
Dim strCommand
|
|
Dim strServerName
|
|
Dim applicationName
|
|
Dim componentName
|
|
Dim roleName
|
|
Dim userName
|
|
Dim interfaceName
|
|
Dim methodName
|
|
Dim applicationFile
|
|
Dim installPath
|
|
Dim componentFile
|
|
Dim componentFileType
|
|
Dim componentProgid
|
|
Dim propertyCheck
|
|
Dim PropArrayUBound
|
|
Dim PropPtr
|
|
|
|
nextArg = 0
|
|
strTarget = ""
|
|
strTarget2 = ""
|
|
strCommand = ""
|
|
strServerName = ""
|
|
applicationName = ""
|
|
componentName = ""
|
|
roleName = ""
|
|
userName = ""
|
|
interfaceName = ""
|
|
methodName = ""
|
|
applicationFile = ""
|
|
installPath = ""
|
|
componentFile = ""
|
|
componentFileType = 0
|
|
componentProgid = ""
|
|
propertyCheck = ""
|
|
PropArrayUBound = 0
|
|
PropPtr = 0
|
|
|
|
'Eliminate '/'from arguments and convert them to lowercase
|
|
Dim strArgs()
|
|
Dim caseArgs()
|
|
Dim origArgs()
|
|
ReDim strArgs(2 * objArgs.Count)
|
|
ReDim caseArgs(2 * objArgs.Count)
|
|
ReDim origArgs(2 * objArgs.Count)
|
|
|
|
'multiple properties
|
|
Dim strPropNames()
|
|
Dim strPropValues()
|
|
|
|
For i = 0 To objArgs.Count - 1
|
|
If Left(objArgs(i), 1) = "/" Then
|
|
caseArgs(i) = Right(objArgs(i), Len(objArgs(i)) - 1)
|
|
strArgs(i) = LCase(caseArgs(i))
|
|
origArgs(i) = objArgs(i)
|
|
Else
|
|
caseArgs(i) = objArgs(i)
|
|
strArgs(i) = LCase(objArgs(i))
|
|
origArgs(i) = objArgs(i)
|
|
End If
|
|
Next
|
|
|
|
For i = objArgs.Count To (2 * objArgs.Count - 1)
|
|
caseArgs(i) = "/"
|
|
strArgs(i) = "/"
|
|
origArgs(i) = "/"
|
|
Next
|
|
|
|
|
|
'Parse arguments
|
|
'===============
|
|
|
|
'Parse "/?"
|
|
If strArgs(nextArg) = "?" Then
|
|
WScript.Echo "COMAdmin" + chr(13) + "[/add] [/delete] [/get] [/set]" + chr(13) + "[/server 'servername'] [/localhost]" + chr(13) + "[/application 'applicationname']" + chr(13) + "[/component 'componentname']" + chr(13) + "[/interface 'interfacename']" + chr(13) + "[/method 'methodname']" + chr(13) + "[/role 'rolename']" + chr(13) + "[/user 'username']" + chr(13) + "[/applicationfile 'applicationfile''installpath']" + chr(13) + "[/componentfile 'componentfile''type'] [/componentprogid 'componentprogid']" + chr(13) + "[/property 'PropName_1;PropValue_1' 'PropName_2;PropValue_2' . . . 'PropName_n;PropValue_n'"
|
|
WScript.Quit (0)
|
|
End If
|
|
|
|
'Parse add/delete/get/set
|
|
If strArgs(nextArg) = "add" Or strArgs(nextArg) = "delete" Or strArgs(nextArg) = "get" Or strArgs(nextArg) = "set" Then
|
|
strCommand = strArgs(nextArg)
|
|
nextArg = nextArg + 1
|
|
Else
|
|
WScript.Echo "Error: must specify add, delete, set or get"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
|
|
'Parse server or local machine
|
|
If strArgs(nextArg) = "server" Then
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
strServerName = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
WScript.Echo "Error: unspecified server name"
|
|
WScript.Quit (-1)
|
|
End If
|
|
Else
|
|
strServerName = "localhost"
|
|
If strArgs(nextArg) = "localhost" Then
|
|
nextArg = nextArg + 1
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse application name
|
|
If strArgs(nextArg) = "application" Then
|
|
strTarget = "application"
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
applicationName = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
strTarget2 = "application"
|
|
nextArg = nextArg + 1
|
|
If strCommand <> "get" Then
|
|
WScript.Echo "Error: unspecified application name"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse component name
|
|
If strArgs(nextArg) = "component" Then
|
|
strTarget = "component"
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
componentName = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
strTarget2 = "component"
|
|
nextArg = nextArg + 1
|
|
If strCommand <> "get" Then
|
|
WScript.Echo "Error: unspecified component name"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse interface name
|
|
If strArgs(nextArg) = "interface" Then
|
|
'Sanity checks
|
|
If componentName = "" Then
|
|
WScript.Echo "Error: interface cannot be specified without a component"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
interfaceName = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
strTarget2 = "interface"
|
|
nextArg = nextArg + 1
|
|
If strCommand <> "get" Then
|
|
WScript.Echo "Error: unspecified interface"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse method name
|
|
If strArgs(nextArg) = "method" Then
|
|
'Sanity checks
|
|
If componentName = "" Then
|
|
WScript.Echo "Error: method cannot be specified without a component"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If interfaceName = "" Then
|
|
WScript.Echo "Error: interface cannot be specified without an interface"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
methodName = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
strTarget2 = "method"
|
|
nextArg = nextArg + 1
|
|
If strCommand <> "get" Then
|
|
WScript.Echo "Error: unspecified method"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse role name
|
|
If strArgs(nextArg) = "role" Then
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
roleName = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
strTarget2 = "role"
|
|
nextArg = nextArg + 1
|
|
If strCommand <> "get" Then
|
|
WScript.Echo "Error: unspecified role name"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
Else
|
|
'Sanity check
|
|
If strCommand = "add" And componentName <> "" Then
|
|
WScript.Echo "Error: cannot set component name when adding component"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If (strCommand = "add" Or strCommand = "delete") And interfaceName <> "" Then
|
|
WScript.Echo "Error: cannot add or delete an interface"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse user name
|
|
If strArgs(nextArg) = "user" Then
|
|
'Sanity check
|
|
If roleName = "" Then
|
|
WScript.Echo "Error: user cannot be specified without a role"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If componentName <> "" Then
|
|
WScript.Echo "Error: cannot specify users when accessing component membership roles"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
userName = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
strTarget2 = "user"
|
|
nextArg = nextArg + 1
|
|
If strCommand <> "get" Then
|
|
WScript.Echo "Error: unspecified user"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse property name and new value
|
|
If strArgs(nextArg) = "property" Then
|
|
'Sanity checks
|
|
If strCommand = "add" Or strCommand = "delete" Then
|
|
WScript.Echo "Error: cannot add or delete a property"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If strTarget2 <> "" Then
|
|
WScript.Echo "Error: unspecified " & strTarget2
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
'Work variables declaration and initialization to handle mulitple properties
|
|
Dim DelimiterPos
|
|
DelimiterPos = 0
|
|
|
|
'Move to the next command line element
|
|
nextArg = nextArg + 1
|
|
|
|
'Verify we have defined atleast one property name;value pair, if not bail
|
|
if Left(origArgs(nextArg), 1) = "/" then
|
|
if ("set" = strComand) then
|
|
WScript.Echo "Error: unspecified property PropName;PropValue pair"
|
|
else
|
|
WScript.Echo "Error: unspecified property name"
|
|
end if
|
|
WScript.Quit (-1)
|
|
end if
|
|
|
|
'Loop through and fill the property arrays (name and value)
|
|
Do while (Left(origArgs(nextArg), 1) <> "/")
|
|
'Right size the arrays
|
|
Redim Preserve PropNames(PropArrayUBound)
|
|
Redim Preserve PropValues(PropArrayUBound)
|
|
'Determine if where, if any, the delimiter exists
|
|
DelimiterPos = Instr(strArgs(nextArg), chr(59))
|
|
'Continue depending whether a delimiter was found
|
|
if (0 = DelimiterPos) then
|
|
if ("get" = strCommand) then
|
|
'Property names only ok only when executing the get command
|
|
propertyCheck = "VALID"
|
|
PropNames(PropArrayUBound) = Trim(caseArgs(nextArg))
|
|
PropValues(PropArrayUBound) = ""
|
|
else
|
|
PropNames(PropArrayUBound) = Trim(caseArgs(nextArg))
|
|
nextArg = nextArg + 1
|
|
if Left(origArgs(nextArg), 1) = "/" Then
|
|
WScript.Echo "Error: you must specify a property value with a set command"
|
|
WScript.Quit (-1)
|
|
End If
|
|
PropValues(PropArrayUBound) = Trim(caseArgs(nextArg))
|
|
end if
|
|
else
|
|
if ("set" = strCommand) then
|
|
'Property names and values ok only when execute set command
|
|
propertyCheck = "VALID"
|
|
PropNames(PropArrayUBound) = Mid(caseArgs(nextArg), 1, DelimiterPos - 1)
|
|
'Handle blank properties to be specified
|
|
if (DelimiterPos = len(caseArgs(nextArg))) then
|
|
PropValues(PropArrayUBound) = ""
|
|
else
|
|
PropValues(PropArrayUBound) = Mid(caseArgs(nextArg), DelimiterPos + 1)
|
|
end if
|
|
else
|
|
WScript.Echo "Error: cannot specify property values with a get command"
|
|
WScript.Quit (-1)
|
|
end if
|
|
end if
|
|
'Increment the array upper bounds
|
|
PropArrayUBound = PropArrayUBound + 1
|
|
'Move the the next command line argument
|
|
nextArg = nextArg + 1
|
|
Loop
|
|
Else
|
|
If strCommand = "set" Or strCommand = "get" And strTarget2 = "" Then
|
|
WScript.Echo "Error: no property specified"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse application file
|
|
If strArgs(nextArg) = "applicationfile" Then
|
|
'Sanity check
|
|
If applicationName = "" Then
|
|
WScript.Echo "Warning: unspecified application name. If application exists it will not be deleted"
|
|
End If
|
|
strTarget = "applicationfile"
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
applicationFile = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
WScript.Echo "Error: unspecified applicationfile name"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If (Left(origArgs(nextArg), 1)) <> "/" Then
|
|
installPath = caseArgs(nextArg)
|
|
nextArg = nextArg + 1
|
|
Else
|
|
WScript.Echo "Warning: unspecified application installation path. Using default"
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse component file
|
|
If strArgs(nextArg) = "componentfile" Then
|
|
'Sanity checks
|
|
If applicationFile <> "" Then
|
|
WScript.Echo "Error: cannot install more than one object"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If componentName <> "" Then
|
|
WScript.Echo "Error: cannot specify component name"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If applicationName = "" Then
|
|
WScript.Echo "Error: cannot add component without target application"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
strTarget = "componentfile"
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
componentFile = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
WScript.Echo "Error: unspecified componentfile name"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If (Left(origArgs(nextArg), 1)) <> "/" Then
|
|
componentFileType = CInt(caseArgs(nextArg))
|
|
nextArg = nextArg + 1
|
|
Else
|
|
WScript.Echo "Error: unspecified componentfile type"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
'Sanity check
|
|
If componentFileType < 1 And componentFileType > 3 Then
|
|
WScript.Echo "Error: invalid componentfile type"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
|
|
|
|
'Parse component progid
|
|
If strArgs(nextArg) = "componentprogid" Then
|
|
'Sanity checks
|
|
If applicationFile <> "" Or componentFile <> "" Then
|
|
WScript.Echo "Error: cannot install more than one object"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If componentName <> "" Then
|
|
WScript.Echo "Error: cannot set name of component"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
If applicationName = "" Then
|
|
WScript.Echo "Error: cannot add component without target application"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
strTarget = "componentprogid"
|
|
If (Left(origArgs(nextArg + 1), 1)) <> "/" Then
|
|
componentProgid = caseArgs(nextArg + 1)
|
|
nextArg = nextArg + 2
|
|
Else
|
|
WScript.Echo "Error: unspecified component progID"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
|
|
|
|
'Final sanity checks
|
|
'=============
|
|
|
|
'Can't get/set properties without a target
|
|
If strCommand = "get" Or strCommand = "set" Then
|
|
If strTarget <> "application" And strTarget <> "component" Then
|
|
WScript.Echo "Error: cannot find target for property"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
|
|
If strTarget2 = "component" And applicationName = "" Then
|
|
WScript.Echo "Error: unspecified application name"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
'Check for extraneous commands
|
|
If strArgs(nextArg) <> "/" Then
|
|
WScript.Echo "Error: unknown argument '" & strArgs(nextArg) & "'"
|
|
WScript.Quit (-1)
|
|
End If
|
|
|
|
|
|
'Get down to business
|
|
'====================
|
|
|
|
'First, we create the catalog object
|
|
Dim catalog
|
|
Set catalog = CreateObject("COMAdmin.COMAdminCatalog.1")
|
|
|
|
'Then we get the applications collection
|
|
Dim applications
|
|
If strServerName <> "localhost" Then
|
|
Dim root
|
|
Set root = catalog.Connect(strServerName)
|
|
Set applications = root.GetCollection("Applications", "")
|
|
Else
|
|
Set applications = catalog.GetCollection("Applications")
|
|
End If
|
|
|
|
applications.Populate
|
|
numApplications = applications.Count
|
|
|
|
If applicationName <> "" Then
|
|
Dim newApplication
|
|
numApplications = applications.Count
|
|
For i = numApplications - 1 To 0 Step -1
|
|
If applications.Item(i).Value("Name") = applicationName Then
|
|
Set newApplication = applications.Item(i)
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
'Operate on a application if a application is the target
|
|
If strTarget = "application" Or strTarget = "applicationfile" Then
|
|
'User operations
|
|
If userName <> "" Or strTarget2 = "user" Then
|
|
Set rolesInPack = applications.GetCollection("Roles", newApplication.Value("ID"))
|
|
rolesInPack.Populate
|
|
|
|
numRoles = rolesInPack.Count
|
|
|
|
Dim userCollection
|
|
Dim numUsers
|
|
|
|
For i = numRoles - 1 To 0 Step -1
|
|
If rolesInPack.Item(i).Value("Name") = roleName Then
|
|
Set userCollection = rolesInPack.GetCollection("UsersInRole", rolesInPack.Item(i).Key)
|
|
userCollection.Populate
|
|
numUsers = userCollection.Count
|
|
|
|
For j = numUsers - 1 To 0 Step -1
|
|
If strTarget2 = "user" Then
|
|
WScript.Echo userCollection.Item(j).Name
|
|
Else
|
|
If userCollection.Item(j).Name = userName Then
|
|
If strCommand = "add" Or strCommand = "delete" Then
|
|
'Delete user, if user exists
|
|
If userCollection.Item(j).Name = userName Then
|
|
userCollection.Remove (j)
|
|
userCollection.SaveChanges
|
|
End If
|
|
Else
|
|
if ("set" = strCommand) then
|
|
PropPtr = 0
|
|
for PropPtr = Lbound(PropNames) to Ubound(PropNames)
|
|
userCollection.Item(j).Value(PropNames(PropPtr)) = PropValues(PropPtr)
|
|
next
|
|
userCollection.SaveChanges
|
|
else
|
|
WScript.Echo userCollection.term(j).Value(PropNames(PropPtr))
|
|
end if
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
Next
|
|
|
|
'Add new user, if necessary
|
|
If strCommand = "add" Then
|
|
Dim newUser
|
|
Set newUser = userCollection.Add
|
|
newUser.Value("User") = userName
|
|
userCollection.SaveChanges
|
|
End If
|
|
WScript.Quit (0)
|
|
End If
|
|
|
|
'Role operations
|
|
If (roleName <> "" And userName = "") Or (strTarget2 = "role") Then
|
|
'Get Application
|
|
Dim rolesInPack
|
|
Set rolesInPack = applications.GetCollection("Roles", newApplication.Value("ID"))
|
|
rolesInPack.Populate
|
|
numRoles = rolesInPack.Count
|
|
For i = numRoles - 1 To 0 Step -1
|
|
If strTarget2 = "role" Then
|
|
WScript.Echo rolesInPack.Item(i).Value("Name")
|
|
Else
|
|
If rolesInPack.Item(i).Value("Name") = roleName Then
|
|
If strCommand = "add" Or strCommand = "delete" Then
|
|
'Delete role
|
|
rolesInPack.Remove (i)
|
|
rolesInPack.SaveChanges
|
|
Else
|
|
if ("set" = strCommand) then
|
|
PropPtr = 0
|
|
For PropPtr = Lbound(PropNames) to Ubound(PropNames)
|
|
rolesInPack.Item(i).Value(PropNames(PropPtr)) = PropValues(PropPtr)
|
|
Next
|
|
rolesInPack.SaveChanges
|
|
else
|
|
WScript.Echo rolesInPack.Item(i).Value(PropNames(PropPtr))
|
|
end if
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
'Add new role, if necessary
|
|
If strCommand = "add" Then
|
|
Dim newRole
|
|
Set newRole = rolesInPack.Add
|
|
newRole.Value("Name") = roleName
|
|
rolesInPack.SaveChanges
|
|
End If
|
|
WScript.Quit (0)
|
|
End If
|
|
|
|
'Application operations
|
|
If strCommand = "add" Or strCommand = "delete" Then
|
|
'Remove all applications that go by the same name as the given application
|
|
If applicationName <> "" Then
|
|
numApplications = applications.Count
|
|
For i = numApplications - 1 To 0 Step -1
|
|
If applications.Item(i).Value("Name") = applicationName Then
|
|
applications.Remove (i)
|
|
applications.SaveChanges
|
|
End If
|
|
Next
|
|
End If
|
|
If strCommand = "add" Then
|
|
If strTarget = "application" Then
|
|
'Add empty application
|
|
Set newApplication = applications.Add
|
|
newApplication.Value("Name") = applicationName
|
|
applications.SaveChanges
|
|
Else
|
|
'Add application from application file
|
|
catalog.InstallApplication applicationFile, installPath, mtsInstallUsers
|
|
End If
|
|
End If
|
|
Else
|
|
'Operate upon desired property
|
|
flag = False
|
|
numApplications = applications.Count
|
|
For i = numApplications - 1 To 0 Step -1
|
|
If strTarget2 = "application" Then
|
|
flag = True
|
|
WScript.Echo applications.Item(i).Value("Name")
|
|
Else
|
|
If applications.Item(i).Value("Name") = applicationName Then
|
|
flag = True
|
|
PropPtr = 0
|
|
if ("set" = strCommand) Then
|
|
for PropPtr = Lbound(PropNames) to Ubound(PropNames)
|
|
applications.Item(i).Value(PropNames(PropPtr)) = PropValues(PropPtr)
|
|
Next
|
|
applications.SaveChanges
|
|
else 'get
|
|
for PropPtr = Lbound(PropNames) to Ubound(PropNames)
|
|
WScript.Echo applications.Item(i).Value(PropNames(PropPtr))
|
|
Next
|
|
End if
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If flag = False Then
|
|
WScript.Echo "Error: unknown property"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
WScript.Quit (0)
|
|
End If
|
|
|
|
|
|
'Operate on a component if a component is the target
|
|
If strTarget = "component" Or strTarget = "componentfile" Or strTarget = "componentprogid" Then
|
|
|
|
'Get components
|
|
Dim components
|
|
Dim numApplications
|
|
numApplications = applications.Count
|
|
For i = numApplications - 1 To 0 Step -1
|
|
If applications.Item(i).Value("Name") = applicationName Then
|
|
Set components = applications.GetCollection("Components", applications.Item(i).Value("ID"))
|
|
components.Populate
|
|
End If
|
|
Next
|
|
|
|
'User and Role operations
|
|
Dim numComponents
|
|
numComponents = components.Count
|
|
|
|
If interfaceName <> "" Or roleName <> "" Or (strTarget2 <> "component" And strTarget2 <> "") Then
|
|
|
|
'Component role membership operations
|
|
If interfaceName = "" And strTarget2 <> "interface" Then
|
|
Dim rolesInComponent
|
|
For i = numComponents - 1 To 0 Step -1
|
|
If components.Item(i).Name = componentName Then
|
|
Set rolesInComponent = components.GetCollection("RolesForComponent", components.Item(i).Key)
|
|
rolesInComponent.Populate
|
|
End If
|
|
Next
|
|
Dim numRoles
|
|
numRoles = rolesInComponent.Count
|
|
For i = numRoles - 1 To 0 Step -1
|
|
If strTarget2 = "role" Then
|
|
WScript.Echo rolesInComponent.Item(i).Name
|
|
Else
|
|
If rolesInComponent.Item(i).Value("Name") = roleName Then
|
|
If strCommand = "add" Or strCommand = "delete" Then
|
|
rolesInComponent.Remove (i)
|
|
rolesInComponent.SaveChanges
|
|
Else
|
|
If strCommand = "set" Then
|
|
WScript "Error: Cannot set properties for component role membership"
|
|
WScript.Quit (-1)
|
|
Else
|
|
PropPtr = 0
|
|
For PropPtr = Lbound(PropNames) to UBound(PropNames)
|
|
WScript.Echo rolesInComponent.Item(i).Value(PropNames(PropPtr))
|
|
Next
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If strCommand = "add" Then
|
|
Dim newRole2
|
|
Set newRole2 = rolesInComponent.Add
|
|
newRole2.Value("Name") = roleName
|
|
rolesInComponent.SaveChanges
|
|
End If
|
|
|
|
WScript.Quit (0)
|
|
|
|
Else 'Method Or Interface operations
|
|
|
|
Dim interfaces
|
|
Dim numInterfaces
|
|
|
|
For i = numComponents - 1 To 0 Step -1
|
|
If components.Item(i).Name = componentName Then
|
|
Set interfaces = components.GetCollection("InterfacesForComponent", components.Item(i).key)
|
|
interfaces.Populate
|
|
End If
|
|
Next
|
|
|
|
numInterfaces = interfaces.Count
|
|
|
|
If methodName <> "" Or strTarget2 = "method" Then 'Is it method or what?
|
|
|
|
Dim methods
|
|
Dim numMethods
|
|
|
|
For i = numInterfaces - 1 To 0 Step -1
|
|
If interfaces.Item(i).Name = interfaceName Then
|
|
Set methods = interfaces.GetCollection("MethodsForInterface", interfaces.Item(i).key)
|
|
methods.Populate
|
|
End If
|
|
Next
|
|
|
|
numMethods = methods.Count
|
|
|
|
'Get roles in method
|
|
Dim rolesMethod
|
|
|
|
For i = numMethods - 1 To 0 Step -1
|
|
If strTarget2 = "method" Then
|
|
WScript.Echo methods.Item(i).Value("Name")
|
|
Else
|
|
If methods.Item(i).Value("Name") = methodName Then
|
|
If propertyCheck <> "" And roleName = "" And strTarget2 = "" Then
|
|
PropPtr = 0
|
|
if ("set" = strCommand) then
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
methods.Item(i).Value(PropNames(PropPtr)) = PropValues(PropPtr)
|
|
Next
|
|
methods.SaveChanges
|
|
else 'get
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
WScript.Echo methods.Item(i).Value(PropNames(PropPtr))
|
|
Next
|
|
WScript.Quit (0)
|
|
End If
|
|
End If
|
|
Set rolesMethod = methods.GetCollection("RolesForMethod", methods.Item(i).Key)
|
|
rolesMethod.Populate
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If strTarget2 = "method" Then
|
|
WScript.Quit (0)
|
|
End If
|
|
|
|
numRoles = rolesMethod.Count
|
|
|
|
For i = numRoles - 1 To 0 Step -1
|
|
If strTarget2 = "role" Then
|
|
WScript.Echo rolesMethod.Item(i).Value("Name")
|
|
Else
|
|
If rolesMethod.Item(i).Value("Name") = roleName Then
|
|
If strCommand = "add" Or strCommand = "delete" Then
|
|
rolesMethod.Remove (i)
|
|
rolesMethod.SaveChanges
|
|
Else
|
|
PropPtr = 0
|
|
if ("set" = strCommand) then
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
rolesMethod.Item(i).Value(PropNames(PropPtr)) = PropValues(PropPtr)
|
|
Next
|
|
rolesMethod.SaveChanges
|
|
else
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
WScript.Echo rolesMethod.Item(i).Value(PropNames(PropPtr))
|
|
Next
|
|
End if
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If strCommand = "add" Then
|
|
Dim newRole4
|
|
Set newRole4 = rolesMethod.Add
|
|
newRole4.Value("Name") = roleName
|
|
rolesMethod.SaveChanges
|
|
End If
|
|
|
|
Else 'Interface...
|
|
|
|
'Get roles in interface
|
|
Dim rolesInterface
|
|
|
|
For i = numInterfaces - 1 To 0 Step -1
|
|
If strTarget2 = "interface" Then
|
|
WScript.Echo interfaces.Item(i).Value("Name")
|
|
Else
|
|
If interfaces.Item(i).Value("Name") = interfaceName Then
|
|
If propertyCheck <> "" And roleName = "" And strTarget2 = "" Then
|
|
PropPtr = 0
|
|
if ("set" = strCommand) then
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
interfaces.Item(i).Value(PropNames(PropPtr)) = PropValues(PropPtr)
|
|
Next
|
|
interfaces.SaveChanges
|
|
else
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
WScript.Echo interfaces.Item(i).Value(PropNames(PropPtr))
|
|
Next
|
|
WScript.Quit(0)
|
|
End If
|
|
End if
|
|
Set rolesInterface = interfaces.GetCollection("RolesForInterface", interfaces.Item(i).Key)
|
|
rolesInterface.Populate
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If strTarget2 = "interface" Then
|
|
WScript.Quit (0)
|
|
End If
|
|
|
|
numRoles = rolesInterface.Count
|
|
|
|
For i = numRoles - 1 To 0 Step -1
|
|
If strTarget2 = "role" Then
|
|
WScript.Echo rolesInterface.Item(i).Value("Name")
|
|
Else
|
|
If rolesInterface.Item(i).Value("Name") = roleName Then
|
|
If strCommand = "add" Or strCommand = "delete" Then
|
|
rolesInterface.Remove (i)
|
|
rolesInterface.SaveChanges
|
|
Else
|
|
PropPtr = 0
|
|
if ("set" = strCommand) then
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
rolesInterface.Item(i).Value(PropNames(PropPtr)) = PropValues(PropPtr)
|
|
Next
|
|
rolesInterface.SaveChanges
|
|
else
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
WScript.Echo rolesInterface.Item(i).Value(PropNames(PropPtr))
|
|
Next
|
|
end if
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If strCommand = "add" Then
|
|
Dim newRole3
|
|
Set newRole3 = rolesInterface.Add
|
|
newRole3.Value("Name") = roleName
|
|
rolesInterface.SaveChanges
|
|
End If
|
|
End If
|
|
End If
|
|
WScript.Quit (0)
|
|
End If
|
|
|
|
'Component operations
|
|
If strCommand = "add" Or strCommand = "delete" Then
|
|
|
|
'Remove all components that go by the same name as the given component
|
|
For i = numComponents - 1 To 0 Step -1
|
|
If components.Item(i).Name = componentName Or (components.Item(i).Value ("ProgID") = componentProgid And componentProgid <> "") Then
|
|
components.Remove (i)
|
|
components.SaveChanges
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
If strCommand = "add" Then
|
|
If strTarget = "componentfile" Then
|
|
'Add component from file
|
|
Select Case componentFileType
|
|
Case 1 'Regular dll
|
|
catalog.InstallComponent newApplication.Value("ID"), componentFile, "", ""
|
|
Case 2 'tlb
|
|
catalog.InstallComponent newApplication.Value("ID"), "", componentFile, ""
|
|
Case 3 'proxy/stub dll
|
|
catalog.InstallComponent newApplication.Value("ID"), "", "", componentFile
|
|
End Select
|
|
Else
|
|
catalog.ImportComponent newApplication.Value("ID"), componentProgid
|
|
End If
|
|
Else
|
|
If strCommand = "get" Or strCommand = "set" Then
|
|
'Operate upon desired property
|
|
flag = False
|
|
For i = numComponents - 1 To 0 Step -1
|
|
If strTarget2 = "component" Then
|
|
WScript.Echo components.Item(i).Name
|
|
flag = True
|
|
Else
|
|
If components.Item(i).Name = componentName Then
|
|
flag = True
|
|
PropPtr = 0
|
|
if ("set" = strCommand) then
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
components.Item(i).Value(PropNames(PropPtr)) = PropValues(PropPtr)
|
|
Next
|
|
components.SaveChanges
|
|
else ' get
|
|
For PropPtr = LBound(PropNames) to UBound(PropNames)
|
|
WScript.Echo components.Item(i).Value(PropNames(PropPtr))
|
|
Next
|
|
WScript.Quit(0)
|
|
end if
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If flag = False Then
|
|
WScript.Echo "Error: unknown property"
|
|
WScript.Quit (-1)
|
|
End If
|
|
End If
|
|
End If
|
|
WScript.Quit (0)
|
|
End If
|
|
|
|
WScript.Echo "Command failed."
|