public/Find-MoodleCourse.ps1
<#
.SYNOPSIS Finds courses. .DESCRIPTION Finds courses in the connected Moodle instance. .PARAMETER SearchString The text to search for. .PARAMETER Enrolled Limits the search to only enrolled courses. .PARAMETER Completion Limits the search to only courses that require completion. .EXAMPLE Find-MoodleCourse -SearchString diploma Finds all courses containing the text "diploma". #> function Find-MoodleCourse { # [OutputType([MoodleCourse])] [CmdletBinding()] param ( [Parameter(Mandatory,Position=0)][string] $SearchString, [Parameter()][switch]$Enrolled, [Parameter()][switch]$Completion ) 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_course_search_courses' } Process { $path = "/webservice/rest/server.php?wstoken=$Token&wsfunction=$function&moodlewsrestformat=json" $body = @{ criterianame = 'search' criteriavalue = $SearchString limittoenrolled = if ($Enrolled) { 1 } else { 0 } onlywithcompletion = if ($Completion) { 1 } else { 0 } } $result = Invoke-RestMethod -Uri ([uri]::new($Url, $path)) -Method POST -Body $body -ContentType 'application/x-www-form-urlencoded' if ($result.courses) { $result.courses | Foreach-Object { New-Object -TypeName MoodleCourse -Property @{ Id = $_.id ShortName = $_.shortname FullName = $_.fullname CategoryId = $_.categoryid IdNumber = $_.idnumber Visible = if ($_.visible) { $true } else {$false } } } } } } |