Functions/Update-GoogleClassroomCourse.ps1

# https://developers.google.com/classroom/reference/rest/v1/courses/patch
# Updates one or more fields in a course.

# Parameter,Required,Type,Description
# CourseIDs,yes,string,Identifier for this course assigned by Classroom.When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The id is still assigned by Classroom and cannot be updated after the course is created.
# --We recommend that anytime you create a course from an SIS or link a course to an SIS, that the SIS’s courseID is used as the course alias.
# --Note, that if you do an alias, you need to precede it with the identifier d: or p: (e.g., d:school_math_101). See https://developers.google.com/classroom/guides/manage-aliases
# name,yes,string,Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
# section,no,string,Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
# descriptionHeading,no,string,Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
# description,no,string,Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
# room,no,string,Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
# ownerId,yes,string,The identifier of the owner of a course. The identifier can be one of the following: (1) the numeric identifier for the user, (2)the email address of the user, or (3) the string literal "me".
# courseState,no,enum,State of the course. If unspecified, the default state is PROVISIONED.

function Update-GoogleClassroomCourse
{ 
    [cmdletbinding()]
    param(

        [parameter(
        Position=0,
        Mandatory=$true,
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [string[]]$CourseIDs, # Array so we can loop

        [parameter(
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [string]$name,

        [parameter(
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [string]$section,

        [parameter(
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [string]$descriptionHeading,
        
        [parameter(
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [string]$description,

        [parameter(
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [string]$room,

        [parameter(
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [string]$ownerId,      
                    
        [parameter(
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
        [CourseState]$courseState
    )

    # Set the endpoints
    $endpoint = 'https://classroom.googleapis.com/v1/courses/'

    # Set the parameters
    $parameters = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
    foreach ($parameter in $PSBoundParameters.GetEnumerator())
    {
        $parameters.Add($parameter.Key,$parameter.Value) 
    }

    # Remove the $CourseIDs parameter since we don't pass that on in with the other parameters
    $parameters.Remove('CourseIDs') | Out-Null

    # Get data for one or more IDs
    foreach ($CourseID in $CourseIDs)
    {
        $response = Update-Entity -uid $CourseID -url $endpoint -params $parameters
        $response
    }
}