Power Script to copy course template to course shells
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Our campuses want to copy a couurse template to the all the course shells created in the SIS import. I thought I can use the Powershell script available in the unsupported GitHub Canvas site. When I try to run the script, I get the message:
Starting copy of course .......
ERROR: An error occured: System.Net.WebException: The remote server returned an error: (404) Not Found.
at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.GetResponse(WebRequest request)
at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord()
I want to know if anybody out there has tried this and got it to work. I am trying to run the script in a windows 7 machine.
The PS version is 3.0.
This is the script if anybody wants to look at it.
-----------------------------------------------------------------------------------------------------------------------------------------------------
# Script to copy course content from one existing course to another
# Version 0.1
#Script Requires PowerShell 3 or higher
# Input File Format is a CSV file with the following headers:
# source_id,destination_id
# Configuration Variables
$canvasURL = 'rsccd.test.instructure.com' # Canvas Instance URL do not include https:// (Example: canvas.instructure.com)
$token = '' # An API token for a user with adequate permission to assign observees -- I placed our access token within ''
$inputFile = 'c:\canvas\copycourses.csv' # Full Path to file to process
$useSISIDs = $false # Set to $true if your input file provides SIS IDs for both source and destination course IDs. Set to $false if your input file uses Canvas IDs for both source and destination course IDs.
#************ Do Not Edit Below This Line ************
#Check for file
if(!(Test-Path $inputFile)){
Write-Host Input file does not exist!
exit
}
$headers = @{"Authorization"="Bearer "+$token}
$in_data = Import-CSV($inputFile);
if($useSISIDs){
$idPrefix = "sis_course_id:"
}else{
$idPrefix = ""
}
forEach($item in $in_data){
$fromCourse = $idPrefix + $item.source_id
$toCourse = $idPrefix + $item.destination_id
$url = 'https://'+$canvasURL+'/api/v1/courses/'+$toCourse+'/content_migrations'
#Write-Host $url
$postData = @{'migration_type'='course_copy_importer'; 'settings[source_course_id]'=$fromCourse}
Write-Host Starting copy of course $fromCourse to course $toCourse
Try {
$results = (Invoke-WebRequest -Headers $headers -Method POST -Uri $url -Body $postData)
Try{
$jresults = ($results.Content | ConvertFrom-Json)
if($jresults.id){
Write-Host " Started"
}
}Catch{
Write-Host " Unable to complete request. An error occured: " + $_.Exception
}
} Catch {
$errorMsg = $_.Exception
#$errorMsg
$terminate = $false
if($errorMsg.Response.StatusCode -eq 'unauthorized'){
$msg = "The provided token is not from a user with sufficient permission to complete the action."
$terminate = $true
}elseif($errorMsg.Response.StatusCode.Value__ -eq "400"){
$msg = "Unable to start copy."
$terminate = $false
}else{
$msg = "An error occured: " + $errorMsg
$terminate = $true
}
Write-Host " ERROR:" $msg
if($terminate){ break }
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------
Thank you,
Asha Vanch
Rancho Santiago Community College District
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
So that means your CSV file contains the SIS_ID for a course in the destination id column. Could you verify that you are also using the SIS_ID in the source id column? My guess is that one column is SIS ID and the other is Canvas Course ID.
This discussion post is outdated and has been archived. Please use the Community question forums and official documentation for the most current and accurate information.