scripts/public/VCUserGroup.ps1

function Get-VCUserGroup
{
    [CmdLetBinding(DefaultParameterSetName='none')]
    [OutputType([VisualCron.SecGroupClass])]
    Param(
        [Parameter(Position=0)]
        [ValidateNotNullOrEmpty()]
        [string[]]$Name,

        [ValidateLength(36,36)]
        [string[]]$Id,

        [Parameter(ParameterSetName='defaultGroups')]
        [switch]$DefaultGroups,

        [Parameter(ParameterSetName='customGroups')]
        [switch]$CustomGroups,

        [Parameter(ValueFromPipeline)]
        [ValidateScript({$_.Connected})]
        [VisualCronAPI.Server[]]$VCServer = (Get-VCSelectedServer)
    )

    Process
    {
        foreach ($_vCServer in $VCServer)
        {
            # Get all Usergroups and filter result, based on given Parameters
            $allUserGroups = $_vCServer.Permissions.GetAllUserGroups()

            if($PSBoundParameters.Keys -contains "Name") {  # Filter by Name
                $allUserGroups = $allUserGroups | Where-Object -FilterScript {$Name -contains $_.Name}
            }

            if($PSBoundParameters.Keys -contains "Id") {  # Filter by Id
                $allUserGroups = $allUserGroups | Where-Object -FilterScript {$Id -contains $_.Id}
            }

            if($DefaultGroups) {  # Filter only show default Usergroups
                $allUserGroups = $allUserGroups | Where-Object -FilterScript {$_.DefaultGroup}  
            }

            if($CustomGroups) { # Filter only show non default Usergroups
                $allUserGroups = $allUserGroups | Where-Object -FilterScript {-Not $_.DefaultGroup}  
            }

            $allUserGroups | Add-GetVCServerMethod -VCServer $_vCServer
            # Output Users
            $allUserGroups | Write-Output
        }
    }
}

function Copy-VCUserGroup
{
    [CmdLetBinding()]
    Param(
        [Parameter(Mandatory,ValueFromPipeline)]
        [VisualCron.SecGroupClass[]]$VCUserGroup,
        
        [Parameter(Mandatory)]
        [ValidateScript({$_.Connected})]
        [VisualCronAPI.Server[]]$DestinationVCServer
    )

    Process
    {
        foreach ($_vCUserGroup in $VCUserGroup)
        {
            $clone = $_vCUserGroup.CloneType()
            $DestinationVCServer | ForEach-Object -Process {
                $_.Permissions.UpdateGroup($clone)
            }
        }
    }
}