public/Get-MoodleGroup.ps1

<#
.SYNOPSIS
Gets a Moodle group.
 
.PARAMETER Id
Specifies the unique ID of the group.
 
.EXAMPLE
Get-MoodleGroup -Id 1
 
Gets a group whose ID is 1.
#>

function Get-MoodleGroup {
    [CmdletBinding(DefaultParameterSetName='id')]
    param (
        [Parameter(Mandatory, Position=0, ParameterSetName='id')]
        [int] $Id,

        [Parameter(Mandatory, ParameterSetName='course', ValueFromPipeline)]
        [MoodleCourse] $Course,

        [Parameter(Mandatory, ParameterSetName='courseid', ValueFromPipeline)]
        [int] $CourseId
    )
    
    Begin {
        $Url = $PsCmdlet.SessionState.PSVariable.GetValue('_MoodleUrl')
        $Token = $PsCmdlet.SessionState.PSVariable.GetValue('_MoodleToken')
        
        if (!$Url -or !$Token) {
            Throw 'You must call the Connect-Moodle cmdlet before calling any other cmdlets.'
        }

        if ($PSBoundParameters.ContainsKey('id')) {
            $function = 'core_group_get_groups'
        } else {
            $function = 'core_group_get_course_groups'
        }
    }
    
    Process {
        $path = "/webservice/rest/server.php?wstoken=$Token&wsfunction=$function&moodlewsrestformat=json"

        if ($PSBoundParameters.ContainsKey('id')) {
            $path += "&groupids[0]=$Id"

            $results = Invoke-RestMethod -Uri ([uri]::new($Url, $path))
        }
        else {
            if ($Course) {
                $CourseId = $Course.Id
            }

            $path += "&courseid=$CourseId"

            $results = (Invoke-RestMethod -Uri ([uri]::new($Url, $path)))
        }

        if ($results) {
            if ($results.errorcode -is [string]) {
                # invalidrecord gets thrown if the group is not found. We just want to not return anything.
                if ($results.errorcode -ne 'invalidrecord') {
                    Write-Error $results.message
                }
                return
            }

            $results | Foreach-Object {
                New-Object -TypeName MoodleGroup -Property @{
                    Id=$_.id 
                    CourseId=$_.courseid 
                    Name=$_.name
                    IdNumber = $_.idnumber
                    Description = $_.description
                    DescriptionFormat = $_.descriptionformat
                    EnrolmentKey = $_.enrolmentkey
                } 
            }
        }
    }
}