exports/Invoke-CVModifyUserGroup.ps1


# ----------------------------------------------------------------------------------
#
# Copyright Microsoft Corporation
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ----------------------------------------------------------------------------------

<#
.Synopsis
Modify the properties of an existing user-group
.Description
Modify the properties of an existing user-group
.Example
PS C:\> {{ Add code here }}
 
{{ Add output here }}
.Example
PS C:\> {{ Add code here }}
 
{{ Add output here }}
 
.Inputs
Commvault.Powershell.Models.ICommvaultPowerShellIdentity
.Inputs
Commvault.Powershell.Models.IUpdateUserGroup
.Outputs
Commvault.Powershell.Models.IGenericResp
.Notes
COMPLEX PARAMETER PROPERTIES
 
To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables.
 
ASSOCIATEDEXTERNALGROUPS <IIdName[]>: .
  [Id <Int64?>]:
  [Name <String>]:
 
ASSOCIATEDLOCALGROUPS <IIdName[]>: .
  [Id <Int64?>]:
  [Name <String>]:
 
BODY <IUpdateUserGroup>: .
  [AllowMultipleCompanyMembers <Boolean?>]: This property can be used to allow addition of users/groups from child companies. Only applicable for commcell and reseller company group.
  [AssociatedExternalGroups <IIdName[]>]:
    [Id <Int64?>]:
    [Name <String>]:
  [AssociatedLocalGroups <IIdName[]>]:
  [AzureGuid <String>]: Azure Object ID used to link this user group to Azure AD group and manage group membership of the user during SAML login
  [ConsoleTypeOperationType <String>]:
  [DoNotInheritRestrictConsoleTypes <Boolean?>]: Option to not inherit the RestrictConsoleTypes from the parent. By default the value is false, parent RestrictConsoleTypes will be inherited.
  [EnableLocalAuthentication <String>]: Allows two-factor authentication to be enabled for the specific types of usergroups. it can be turned on or off based on user preferences. There will be usergroups that will not have this option.
  [EnableTwoFactorAuthentication <String>]: Allows two-factor authentication to be enabled for the specific types of usergroups. it can be turned on or off based on user preferences. There will be usergroups that will not have this option.
  [Enabled <Boolean?>]: allows the enabling/disabling of the user group.
  [EnforceFsQuota <Boolean?>]: determines if a data limit will be set for the user group.
  [ExternalUserGroupsOperationType <String>]: Allows adding, deleting or overwriting associated external user groups of a user group. Default is adding associated external user groups
  [LaptopAdmins <Boolean?>]: When set to true, users in this group cannot activate or be set as server owner
  [LaptopPlanId <Int64?>]:
  [LaptopPlanName <String>]:
  [LocalUserGroupsOperationType <String>]: Allows adding, deleting or overwriting associated local user groups of a user group. Default is adding associated local user groups
  [NewDescription <String>]: gives a new description to the user group.
  [NewName <String>]: gives a new name to the user group.
  [PlanOperationType <String>]: determines if an existing user has to be added to the user group or removed from the user group
  [QuotaLimitInGb <Int64?>]: if enforceFSquota is enabled, the quota limit can be provided in GBs
  [RestrictConsoleType <String[]>]:
  [UserOperationType <String>]: determines if an existing user has to be added to the user group or removed from the user group
  [Users <IIdName[]>]:
 
INPUTOBJECT <ICommvaultPowerShellIdentity>: Identity Parameter
  [AccessPathId <Int64?>]: Id of the mount path whose access path has to be deleted
  [AgentId <Int64?>]: Id of the agent to be modified
  [AppGuid <String>]: GUID of the Application to get details
  [AppId <Int64?>]: Commvault exchange app id
  [ApplicationGroupId <Int64?>]: applicationGroupId is the ID of the Kubernetes application group
  [ArrayId <Int64?>]:
  [AssetId <String>]: FQDN of the asset
  [BackupDestinationId <Int64?>]: Id of the backupDestination to be modified
  [BackupDestionationId <Int64?>]:
  [BackupLocationId <Int64?>]: Id of the backup location whose details have to be fetched
  [BlackoutWindowId <Int64?>]: Id of the Blackout Window whose details have to be fetched
  [BucketId <Int64?>]: Id of Bucket
  [ClientId <Int64?>]:
  [CloneId <Int64?>]: ID of the cloned bucket
  [CloudStorageId <Int64?>]: Id of cloud Storage
  [ClusterId <Int64?>]: Id of the cluster whose modifier has to be listed.
  [CompanyId <Int64?>]: Id of the Company whose details have to be fetched
  [CopyId <Int64?>]:
  [CredentialId <String>]:
  [CredentialName <String>]:
  [DomainId <Int64?>]: ID of the AD/LDAP domain
  [DrOperation <String>]: Name of DR operation. Case insensitive
  [DriveId <Int64?>]: Id of the Drive of which the drive details has to be displayed
  [EntityId <Int64?>]: Recovery entity Id
  [EntityType <String>]: Type of the entity
  [FailoverGroupId <Int64?>]: Id of the failover group
  [GlobalSearchEntity <String>]: name of global search entity
  [HfsShareId <Int64?>]: Id of the HFS Share to fetch its status
  [HyperScaleStorageId <Int64?>]: Id of hyperscale storage
  [HypervisorId <Int64?>]: Id of the HYpervisor to get
  [Id <Int64?>]:
  [IndexServerClientId <Int64?>]: Pseudo client id of the index server
  [InstanceId <Int64?>]: Id of the instance to modify
  [InventoryId <Int64?>]: Inventory id
  [JobId <Int64?>]:
  [KmsId <Int64?>]: Id of Key Management Server
  [LibraryId <Int64?>]: Id of the library to view the data
  [MediaAgentId <Int64?>]: Id of the Media Agent whose details have to be fetched
  [MetadataCacheId <Int64?>]: Id of metadata cache
  [ModifierName <String>]: Name of the modifier to be read.
  [Name <String>]:
  [NameSpace <String>]: Name of the namespace to browse for content
  [NodeId <Int64?>]: Id of node
  [PairId <Int64?>]:
  [PlanId <Int64?>]: Id of the object store plan to fetch details
  [RecoveryGroupId <Int64?>]: Recovery group Id
  [RecoveryTargetId <Int64?>]: id of recovery target
  [RegionId <Int64?>]: Region id to be deleted.
  [RegionList <String>]: List of region names/ids to be deleted. If region ids are passed, set isRegionIdList=true
  [ReplicationGroupId <Int64?>]:
  [RequestId <Int64?>]: Unique identifier for the request
  [RoleId <Int64?>]: Role Id
  [RpsId <String>]:
  [RuleId <Int64?>]: Id of the rule to update in Plan
  [ScheduleId <Int64?>]: ID of the DR operation schedule
  [SchedulePolicyId <Int64?>]:
  [ServerGroupId <Int64?>]: Id of the serverGroupId whose details have to be fetched
  [ServerId <Int64?>]: Id of the server to modify
  [StoragePoolId <Int64?>]: Id of the storage pool whose associated copies have to be fetched
  [SubclientId <Int64?>]: Id of the subclient to modify
  [TagId <Int64?>]: Id of the tag to delete
  [TagValue <String>]: tag value to delete
  [TopologyId <String>]:
  [UserGroupId <Int64?>]: Id of the user-group whose details have to be fetched
  [UserId <Int64?>]: Id of the User whose details have to be fetched
  [VMGroupId <Int64?>]: Id of the VMgroup to update
  [VMGuid <String>]:
  [VMUuid <String>]: The vmUUID can be obtained from GET /virtualMachines UUID property
  [VendorId <Int64?>]:
 
USERS <IIdName[]>: .
  [Id <Int64?>]:
  [Name <String>]:
.Link
https://docs.microsoft.com/en-us/powershell/module/commvaultpowershell/invoke-cvmodifyusergroup
#>

function Invoke-CVModifyUserGroup {
[OutputType([Commvault.Powershell.Models.IGenericResp])]
[CmdletBinding(DefaultParameterSetName='ModifyExpanded', PositionalBinding=$false, SupportsShouldProcess, ConfirmImpact='Medium')]
param(
    [Parameter(ParameterSetName='Modify', Mandatory)]
    [Parameter(ParameterSetName='ModifyExpanded', Mandatory)]
    [Commvault.Powershell.Category('Path')]
    [System.Int64]
    # Id of the user-group to update
    ${UserGroupId},

    [Parameter(ParameterSetName='ModifyViaIdentity', Mandatory, ValueFromPipeline)]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded', Mandatory, ValueFromPipeline)]
    [Commvault.Powershell.Category('Path')]
    [Commvault.Powershell.Models.ICommvaultPowerShellIdentity]
    # Identity Parameter
    # To construct, see NOTES section for INPUTOBJECT properties and create a hash table.
    ${InputObject},

    [Parameter(ParameterSetName='Modify', Mandatory, ValueFromPipeline)]
    [Parameter(ParameterSetName='ModifyViaIdentity', Mandatory, ValueFromPipeline)]
    [Commvault.Powershell.Category('Body')]
    [Commvault.Powershell.Models.IUpdateUserGroup]
    # .
    # To construct, see NOTES section for BODY properties and create a hash table.
    ${Body},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.Management.Automation.SwitchParameter]
    # This property can be used to allow addition of users/groups from child companies.
    # Only applicable for commcell and reseller company group.
    ${AllowMultipleCompanyMembers},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [Commvault.Powershell.Models.IIdName[]]
    # .
    # To construct, see NOTES section for ASSOCIATEDEXTERNALGROUPS properties and create a hash table.
    ${AssociatedExternalGroups},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [Commvault.Powershell.Models.IIdName[]]
    # .
    # To construct, see NOTES section for ASSOCIATEDLOCALGROUPS properties and create a hash table.
    ${AssociatedLocalGroups},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # Azure Object ID used to link this user group to Azure AD group and manage group membership of the user during SAML login
    ${AzureGuid},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # .
    ${ConsoleTypeOperationType},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.Management.Automation.SwitchParameter]
    # Option to not inherit the RestrictConsoleTypes from the parent.
    # By default the value is false, parent RestrictConsoleTypes will be inherited.
    ${DoNotInheritRestrictConsoleTypes},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # Allows two-factor authentication to be enabled for the specific types of usergroups.
    # it can be turned on or off based on user preferences.
    # There will be usergroups that will not have this option.
    ${EnableLocalAuthentication},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # Allows two-factor authentication to be enabled for the specific types of usergroups.
    # it can be turned on or off based on user preferences.
    # There will be usergroups that will not have this option.
    ${EnableTwoFactorAuthentication},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.Management.Automation.SwitchParameter]
    # allows the enabling/disabling of the user group.
    ${Enabled},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.Management.Automation.SwitchParameter]
    # determines if a data limit will be set for the user group.
    ${EnforceFsQuota},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # Allows adding, deleting or overwriting associated external user groups of a user group.
    # Default is adding associated external user groups
    ${ExternalUserGroupsOperationType},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.Management.Automation.SwitchParameter]
    # When set to true, users in this group cannot activate or be set as server owner
    ${LaptopAdmins},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.Int64]
    # .
    ${LaptopPlanId},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # .
    ${LaptopPlanName},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # Allows adding, deleting or overwriting associated local user groups of a user group.
    # Default is adding associated local user groups
    ${LocalUserGroupsOperationType},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # gives a new description to the user group.
    ${NewDescription},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # gives a new name to the user group.
    ${NewName},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # determines if an existing user has to be added to the user group or removed from the user group
    ${PlanOperationType},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.Int64]
    # if enforceFSquota is enabled, the quota limit can be provided in GBs
    ${QuotaLimitInGb},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String[]]
    # .
    ${RestrictConsoleType},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [System.String]
    # determines if an existing user has to be added to the user group or removed from the user group
    ${UserOperationType},

    [Parameter(ParameterSetName='ModifyExpanded')]
    [Parameter(ParameterSetName='ModifyViaIdentityExpanded')]
    [Commvault.Powershell.Category('Body')]
    [Commvault.Powershell.Models.IIdName[]]
    # .
    # To construct, see NOTES section for USERS properties and create a hash table.
    ${Users},

    [Parameter(DontShow)]
    [Commvault.Powershell.Category('Runtime')]
    [System.Management.Automation.SwitchParameter]
    # Wait for .NET debugger to attach
    ${Break},

    [Parameter(DontShow)]
    [ValidateNotNull()]
    [Commvault.Powershell.Category('Runtime')]
    [Commvault.Powershell.Runtime.SendAsyncStep[]]
    # SendAsync Pipeline Steps to be appended to the front of the pipeline
    ${HttpPipelineAppend},

    [Parameter(DontShow)]
    [ValidateNotNull()]
    [Commvault.Powershell.Category('Runtime')]
    [Commvault.Powershell.Runtime.SendAsyncStep[]]
    # SendAsync Pipeline Steps to be prepended to the front of the pipeline
    ${HttpPipelinePrepend},

    [Parameter()]
    [Commvault.Powershell.Category('Runtime')]
    [System.Management.Automation.SwitchParameter]
    # Returns true when the command succeeds
    ${PassThru},

    [Parameter(DontShow)]
    [Commvault.Powershell.Category('Runtime')]
    [System.Uri]
    # The URI for the proxy server to use
    ${Proxy},

    [Parameter(DontShow)]
    [ValidateNotNull()]
    [Commvault.Powershell.Category('Runtime')]
    [System.Management.Automation.PSCredential]
    # Credentials for a proxy server to use for the remote call
    ${ProxyCredential},

    [Parameter(DontShow)]
    [Commvault.Powershell.Category('Runtime')]
    [System.Management.Automation.SwitchParameter]
    # Use the default credentials for the proxy
    ${ProxyUseDefaultCredentials}
)

begin {
    try {
        $outBuffer = $null
        if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer)) {
            $PSBoundParameters['OutBuffer'] = 1
        }
        $parameterSet = $PSCmdlet.ParameterSetName
        $mapping = @{
            Modify = 'CommvaultPowershell.private\Invoke-CVModifyUserGroup_Modify';
            ModifyExpanded = 'CommvaultPowershell.private\Invoke-CVModifyUserGroup_ModifyExpanded';
            ModifyViaIdentity = 'CommvaultPowershell.private\Invoke-CVModifyUserGroup_ModifyViaIdentity';
            ModifyViaIdentityExpanded = 'CommvaultPowershell.private\Invoke-CVModifyUserGroup_ModifyViaIdentityExpanded';
        }
        $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand(($mapping[$parameterSet]), [System.Management.Automation.CommandTypes]::Cmdlet)
        $scriptCmd = {& $wrappedCmd @PSBoundParameters}
        $steppablePipeline = $scriptCmd.GetSteppablePipeline($MyInvocation.CommandOrigin)
        $steppablePipeline.Begin($PSCmdlet)
    } catch {
        throw
    }
}

process {
    try {
        $steppablePipeline.Process($_)
    } catch {
        throw
    }
}

end {
    try {
        $steppablePipeline.End()
    } catch {
        throw
    }
}
}