public/New-MoodleGroup.ps1
<#
.SYNOPSIS Creates a new Moodle group. .PARAMETER Course Specifies the course to which the group should apply. .PARAMETER CourseId Specifies the ID of the course to which the group should apply. .PARAMETER Name Specifies the name of the new group. .PARAMETER Description Specifies the description of the new group. .PARAMETER DescriptionFormat Specifies the format of the given description. .PARAMETER EnrolmentKey Specifies the secret enrolment key for this group/course. .PARAMETER IdNumber Specifies a new free-text ID Number for the group. .EXAMPLE New-MoodleGroup -CourseId 1 -Name 'My Group' -Description 'Group description!' #> function New-MoodleGroup { # [OutputType([MoodleGroup])] [CmdletBinding(SupportsShouldProcess)] param ( [Parameter(Mandatory,ValueFromPipeline,Position=0,ParameterSetName='course')] [MoodleCourse] $Course, [Parameter(Mandatory,Position=0,ParameterSetName='courseid')] [int] $CourseId, # The name of the group. [Parameter(Mandatory)] [string] $Name, # The description of the group. [string] $Description, # The format of the supplied description. [MoodleDescriptionFormat] $DescriptionFormat = [MoodleDescriptionFormat]::HTML, # Secret enrolment phrase. [string] $EnrolmentKey, # The external "ID Number" of the user. [string] $IdNumber ) 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." } $function = 'core_group_create_groups' $path = "/webservice/rest/server.php?wstoken=$Token&wsfunction=$function&moodlewsrestformat=json" } Process { if ($Course) { $CourseId = $Course.Id } $body = @{ 'groups[0][courseid]' = $CourseId 'groups[0][name]' = $Name 'groups[0][description]' = $Description 'groups[0][descriptionformat]' = [int]$DescriptionFormat 'groups[0][enrolmentkey]' = $EnrolmentKey 'groups[0][idnumber]' = $IdNumber } if ($PSCmdlet.ShouldProcess($UserName, "Create")) { $results = Invoke-RestMethod -Method Post -Uri ([uri]::new($Url, $path)) -Body $body -ContentType 'application/x-www-form-urlencoded' if ($results) { if ($results.errorcode) { Write-Error $results.message } $results | Foreach-Object { New-Object -TypeName MoodleGroup -Property @{ Id=$_.id CourseId=$_.courseid Name=$_.name IdNumber = $_.idnumber Description = $_.description DescriptionFormat = $_.descriptionformat EnrolmentKey = $_.enrolmentkey } } } } } } |