public/Get-MoodleCourse.ps1
<#
.SYNOPSIS Gets a course. .DESCRIPTION Gets a course from the connected Moodle instance. .PARAMETER Id Specifies the unique ID of a course. .PARAMETER Category Specifies a course category. .PARAMETER ShortName Specifies the short name of a course. .PARAMETER IdNumber Specifies the free-text ID Number of a course. .PARAMETER CategoryId Specifies a course category ID. .EXAMPLE Get-MoodleCourse -ShortName NET101 Gets a course whose short name is 'NET101'. .EXAMPLE Get-MoodleCourseCategory 17 | Get-MoodleCourse Gets all courses whose category is #17. #> function Get-MoodleCourse { # [OutputType([MoodleCourse])] [CmdletBinding(DefaultParameterSetName='id')] param ( # The unique course id. [Parameter(ParameterSetName="id",Position=0)][int] $Id, # Only return courses from this category. [Parameter(ParameterSetName="pipeline", ValueFromPipeline)][MoodleCourseCategory]$Category, # The short name of the course. [Parameter(ParameterSetName="shortname")][string] $ShortName, # The external "ID Number" of the course. [Parameter(ParameterSetName="idnumber")][string] $IdNumber, # The category id. [Parameter(ParameterSetName="category")][int] $CategoryId ) 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_get_courses_by_field' } Process { $path = "webservice/rest/server.php?wstoken=$Token&wsfunction=$function&moodlewsrestformat=json" $params = @{ id = $Id shortname = $ShortName idnumber = $IdNumber } if ($PSBoundParameters.ContainsKey('categoryid')) { $path += "&field=category&value=$CategoryId" } elseif ($Category) { $path += "&field=category&value=$($Category.Id)" } foreach ($key in $params.Keys) { if ($PSBoundParameters.ContainsKey($key)) { $path += "&field=$key&value=$($params[$key])" } } $result = Invoke-RestMethod -Uri ([uri]::new($Url, $path)) $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 } } } } } |