GASでユーザーリストを取得してみた
前に、Google Workspace for Educationの年度更新について、Classroomのことが問題だと書いた。Classroomのオーナーでないと削除ができないのだけれど、誰がオーナーになっているのかわからない。だいたい、ドメインの中にどんなClassroomがあるのかだって管理者でもわからない。ということで、GASを使ってそこがわかるようにしてみた。
ClassroomのAPIからすぐに取得できるのが、オーナーとなっているユーザーIDでこれが21桁?の固有の数値となっている。EmailアドレスのIDではないのだ。これを、ユーザーのデータから取得しないと、だれなのかわからない。調べるとやっている人がいるので、参考に作ってみた。ユーザーを作るときに、depertmentに学校名を入れてあったので、それをorganizationsから引っ張ってくるところが結構難しかった。
参考にしたのはここ
作ったGASのコードは以下
/**
* Lists all the users in a domain sorted by first name.
* 参考は https://developers.google.com/apps-script/advanced/admin-sdk-directory
* よくわからなかったorganizationsのところは
* https://josys-diary.com/cloud/g_suite/707/
*/
function listAllUsers() {
const sheet = SpreadsheetApp.getActiveSheet();//シートに書き込むための準備
var values = new Array();//取得したデータを入れる2次元配列の準備
var data = [];//一つの配列
var pageToken;
var page;
var j = 0;
do {
page = AdminDirectory.Users.list({
domain: 'ここは、自分のところのドメイン',
orderBy: 'email',
maxResults: 500,//MAXが500
pageToken: pageToken
});
var users = page.users;
if (users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
if (user.primaryEmail.indexOf("s2") == -1) {//Emailのはじめがs2が児童生徒にしてあるので、それ以外の先生たち。来年はs3も出てくる
if(user.organizations) {
for (var m = 0; m < user.organizations.length ; m++ ) {
if (user.organizations[m].primary == true) {
var department = user.organizations[m].department;//ここが学校名が入っているところ
}
}
} else {
var department = "なし"
}
Logger.log('%s %s %s (%s) %s %s', j, user.id, user.name.fullName, user.orgUnitPath, user.primaryEmail, department);
//user.orgUnitPath 入っているOU
data = [j, user.id, user.name.fullName, user.orgUnitPath, user.primaryEmail, department];
values.push(data);//2次元配列に入れる
j++;
}
}
} else {
Logger.log('No users found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
//values.shift();
Logger.log(values);
sheet.getRange(1,1,values.length,values[5].length).setValues(values);//とりあえず配列5番目のLengthを列数
}
これで、スプレッドシートに
通し番号、ユーザーID、ユーザー氏名、OU、Email(ID)、学校名の一覧表ができる。
自分のところでは、管理コンソールから、ユーザーを作成するときに、「Employee Title」、「Department」、「Cost Center」を使うことができ、これを使ってフィルタを使って絞り込むことができたりしたので、ここを使っている。Departmentには、学校名を入れて使っている。なので、そこを使いたかった。
これで、Classroomの情報と合わせれば、どの学校の誰がオーナーになってClassroomを作ったのかがわかるようになった。このあと、学校にスプレッドシートを渡して、削除し忘れがチェックしてもらう予定だ。