Using Scripting Library to Manipulate Group Membership within Business Units
The CapaInstaller Scripting Library has some useful functions for manipulating the group memberships of units within the CapaInstaller environment. System administrators can create groups in Business Units with names that match already existing groups at the point level. This is legal but posses poses a problem for manipulating unit membership of groups with similar names because, currently, there is no way for the CapaInstaller environment to distinguish between groups at the point level and groups at the Business Unit level. The current implementation of Scripting Library does not allow the addition of adding new parameters to existing functions without severe consequences to existing code, so instead of adding a new parameter, we chose to expand the use of the sGroup parameter to explicitly describe the location of groups in Business Units explicitly.
When you want to manipulate group members of a group in a Business Unit, you simply prefix the sGroup parameter with the constant BU_GROUP_PREFIX. When you do this, the CapaInstaller environment will know that the group you are referring refer to must exist within a Business Unit. If you try to add a unit to a group that does not currently exist, that group will automatically be created. If you do not prefix sGroup with BU_GROUP_PREFIX, the CapaInstaller environment will manipulate group membership at the point level. When listing the group membership of a unit all groups that exist in a Business Unit will have BU_GROUP_PREFIX prefixed in their names.
NOTE: These variables are managed by CapaInstaller Windows Agent. If an agent is not running, the values will typically not represent the current state.
Example
VBScript
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
If bStatus Then bStatus = CMS_AddComputerToStaticGroup(gsUnitName, "Group Name") If bStatus Then bStatus = CMS_AddComputerToStaticGroup(gsUnitName, BU_GROUP_PREFIX & "Group Name") |
This will add a unit to 'Group Name' at the point level and add it to 'Group Name' inside its Business Unit. The selected Business Unit is dynamic and will be selected based on the gsUnitName parameter. If gsUnitName is not linked to a Business Unit, nothing will happen.
Example
VBScript
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
If bStatus Then bStatus = CMS_GetGroupMembership() For index = LBound(gaValue) to UBound(gaValue) xStatus = Job_WriteLog("Install", "Index #" & index & ": '" & CStr(gaValue(index)) & "'", bStatus, True) If CStr(gaValue(index)) = BU_GROUP_PREFIX & "Group Name" Then xStatus = Job_WriteLog("Install", "'Unit is member of: '" & CStr(gaValue(index)) & "'", bStatus, True) End If Next |
...
gsBusinessUnitName can be used to get the name of the Business Unit that a unit is linked to. If the unit is not linked to a Business Unit, this variable will be an empty string.
Example
VBScript
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
If bStatus And gbIsMemberOfBusinessUnit Then If bStatus Then bStatus = CMS_AddComputerToStaticGroup(gsUnitName, BU_GROUP_PREFIX & "Group Name") End If If bStatus And gsBusinessUnitName = "Business Unit Name" Then If bStatus Then bStatus = CMS_AddComputerToStaticGroup(gsUnitName, BU_GROUP_PREFIX & "Group Name") End If |
You can use these variables to make decisions based on membership and names of Business Units.
PowerShell (PowerPacks)
...
Use BU\\ in front of the group name to create a group in the BU
...
that the device is
...
a member of.
Example
PowerShell
Code Block | ||||
---|---|---|---|---|
| ||||
BU\\GroupNameif (CMS_AddComputerToStaticGroup -group 'BU\\static1') { $cs.Job_WriteLog("Added", "Computer added to static group: 'static1'") } |