public/Get-MoodleUserCourse.ps1

<#
.SYNOPSIS
Gets courses a user is enrolled in.
 
.PARAMETER UserId
Specifies the unique ID of a user.
 
.PARAMETER User
Specfies a Moodle user.
 
.EXAMPLE
Get-MoodleUserCourse -UserId 1
 
Gets all courses that user #1 is enrolled in.
 
.EXAMPLE
Get-MoodleUser 1 | Get-MoodleUserCourse
 
Gets all courses that user #1 is enrolled in.
#>

function Get-MoodleUserCourse {
    # [OutputType([MoodleCourse])]
    [CmdletBinding(DefaultParameterSetName='id')]
    param (
        # The unique user id.
        [Parameter(ParameterSetName="id",Mandatory,Position=0)][int] $UserId,
        # The user to return courses for.
        [Parameter(ParameterSetName="pipeline", ValueFromPipeline)][MoodleUser]$User
    )
    
    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_enrol_get_users_courses'
    }
    
    Process {
        $path = "/webservice/rest/server.php?wstoken=$Token&wsfunction=$function&moodlewsrestformat=json"

        if ($User) {
            $UserId = $User.Id
        }
        $path = $path + "&userid=$UserId"

        $results = Invoke-RestMethod -Uri ([uri]::new($Url, $path)) 
        $results | Foreach-Object { 
            New-Object -TypeName MoodleCourse -Property @{
                Id = $_.id 
                ShortName = $_.shortname
                FullName = $_.fullname
                CategoryId = $_.category
                IdNumber = $_.idnumber 
                Visible = if ($_.visible) { $true } else {$false }
            }
        }
    }
}