Skip to main content

Syncing Google Classroom to MIS data - take 2

I've previously blogged about how to make Google Classrooms and sync them from Capita SIMS using GAM - you can see that post here. However, that post required groups made by Hapara Teacher Dashboard to work. What if you don't want or cannot afford a paid-for solution? Well, a couple of scripts will allow you to to do this.

I've gone through the process in this video:

Script to clean out "s from SIMS output (run in the path oif the script):

$Path = "c:\gam\hapara\students.csv" 
(Import-CSV -Path $Path) | Select-Object -Property 'Email', 'Class Code', 'UID'| Export-CSV -Path C:\gam\hapara\classroom\students.csv -notype
(gc C:\GAM\hapara\classroom\students.csv) | % {$_ -replace '"', ""} | out-file C:\GAM\hapara\classroom\students.csv -Fo -En ascii

Change the file names and paths to suit yourself.

The Python code

def readStudents(infile):
    students = []
        studentFile = open(infile, "r")
        for line in studentFile:
            student = line.split(",")
            student[2] = student[2].replace("\n", "")
    except IOError:
        print("Couldn't read CSV file!")
        if "studentFile" in locals():
    return students

def findUniqueClasses(students):
    uniqueClasses = []
    for i in range(1, len(students)):
        if not students[i][1] in uniqueClasses:
    return uniqueClasses

def findStudentsInClasses(uniqueClasses, students):
    studentsInClasses = []
    for theClass in uniqueClasses:
        studentsInClass = [theClass, ""]
        for i in range(len(students)):
            if students[i][1] == theClass:
                # studentsInClass[1] = studentsInClass[1] + students[i][0] + "," + theClass + "\n"
                studentsInClass[1] = studentsInClass[1] + students[i][0] + "\n"
    return studentsInClasses

def createClassFiles(studentsInClasses):
    for className in studentsInClasses:
            newFile = open(className[0] + ".csv", "w")
        except IOError:
            print("Couldn't save the class file!" + className[0])
            if "newFile" in locals():

if __name__ == "__main__":
    infile = "students.csv"
    students = readStudents(infile)
    createClassFiles(findStudentsInClasses(findUniqueClasses(students), students))

Again - this might need modding based on your file names. Code produced by my son Robert Nixon.

And finally, sync to classroom vis the following PowerShell (run in your GAM directory)

$list = Import-Csv C:\GAM\groups.csv
foreach ($entry in $list)
    .\gam.exe course $($ sync students file $($entry.file)

Again mod paths and filenames to suit you.

To get this working in any specific environment will take a little work - but once done - will run as scheduled tasks for as long as you want without issue or cost.


Popular posts from this blog

Delete a specific email using GAM

If a user send an inappropriate email to a loads of people or get stung by some sort of email exploit you can quickly delete the email from all of the recipients using a GAM command.
Step 1 - get the email header Go into Google Vault and search for the offending user or someone known to have got the message.
Click show details and grab the email ID. This will be a long string of characters followed by
Step 2 - find out who has the email Go into Google Vault and find the original message sent by the offending user. Look at the details to see who got it. Copy the list and dump it into a spreadsheet. Clean up to just a list of emails with a column header 'mail'. Save as a csv file.
Step 3 - delete messages with GAM Put your CSV file in your GAM folder - this e.g. assumes its called mail.csv
gam csv mail.csv gam user ~mail delete messages query rfc822msgid:MESSAGEIDHERE doit

The alternative nuke option is:
gam all users delete messages query rfc822msgid:MESSAGEI…

My favorite GAM commands - well a few of them at least!

Where would be without GAM? Paying for expensive syncing tools or doing tedious manual tasks in the admin console. GAM can automate most things you might want to do in G Suite. So these are a few of my favourite commands - one I use either as part of a batch file - or just standalone. There are loads more - but these are ones that are used daily.
Classroom Create a spreadsheet of all your domains classes - gam print courses todrive

Create a spreadsheet of a teacher's classes: gam print courses teacher todrive

Bulk create classes:
gam csv classes.csv gam create course alias ~alias name ~alias section ~subject teacher ~teacher status ACTIVE

where classes.csv is a list of classes you want to make.

Add teachers:
gam csv teachers.csv gam course ~alias add teacher ~teacher

Add students:
gam csv students.csv gam course ~alias add teacher ~student

Sync Students (in this example to a group - but could be an ou/csv file)
gam csv groups.csv gam course ~groupmail sync students g…

How to beat ChromeOS EOL and carry on getting updates

ChromeOS devices are great in loads of ways, but they have built-in obsolescence. Google will stop providing updates at a predetermined time according to the schedule you can find here. So the best you will achieve is 6.5 year if you buy the device on the launch day. In reality, it will be generally much less. It's something to watch as a good deal might not be such a good deal if the device only has two years left.

Once a device reaches its "due" date, you get a red pop up telling you its time to update every time you log in. The update section tells you there are no more updates. Now the device will work fine - for a while. You might get another 6 months use out of it before core services like Gmail stop working. However, if you are prepared to do a little work, you can install the OS of your choice onto the device and carry on using the device and not accept this. If you want ChromeOS, then you can install Cloudready from Neverware. I'll outline the basic steps be…