ユーザーの参加グループをGASで出力(Google Workspace)
Google Workspace(G Suite)を利用している時に、ユーザーがどのグループ(メーリングリスト)に参加しているか調べると思いますが、Google管理コンソールでは、参加しているグループの一覧表示する場合、最大50件しか表示されない。
参加しているグループがそれ以上の場合は、ページ送りして確認するしかありません。(2021年1月現在)
また、管理者であってもその一覧をエクスポートすることはできないので、今回GAS(Google Apps Script)を利用してスプレッドシートに出力することにしました。
スプレッドシートを準備
スプレッドシートを準備します。
今回、C1のセルに検索するユーザーのメールアドレスを記入し、[検索]という画像ボタンを用意して、GASを実行します。
A5のセル以下に出力されます。
※出力には数分(遅い)掛かります。
また、[クリア]という画像ボタンを用意し、押すことでC1とA5~A500までの値を削除する機能も付けてます。
※操作上便利かな?と思ったので[検索][クリア]ボタンを付けたものを紹介してますが、本来は必要ありません。ですので、必要に応じて準備してください。
スクリプトエディタの準備
スクリプトエディタでは、サービスとして『AdminDirectory』を追加しております。
このことから、実行は特権管理者のみが行えますので、それ以下の権限の方は実行できません。
スクリプトについて
・rClearの動き
スプレッドシートの[クリア]ボタンを押すと実行され、C1とA5~A500までの値を削除します。
・getListMainの動き
※実行前にdomainの場所に利用中のドメインを記述してください
[14行目~]実行時にrClearと同様にA5~A500までの値を削除します。
[18行目~]C1のデータを取得します
[25行目~]グループ名を取得します。
仕様上の最大200件まで取得します。それ以上にグループが作成されている場合があるので、pageTokenを取得し、次のリストを取得します。
[50行目~]pegeTokenが無くなるまで、whileで回し続けます。
[36行目~]グループ名を取得したら、その処理の中でC1に記述されたユーザーのメールアドレスを探します。
マッチしたら、グループアドレスを格納します
[42行目]グループリストの取得を終えたら、スプレッドシート出力用の関数(values)に格納します
[61行目]スプレッドシートにのA5出力します
[63行目~]完了メッセージを表示させます。
スクリプトはこちら
[shell]
function rClear() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range1 = ss.getRange("C1");
var range2 = ss.getRange("A5:A500");
range1.clearContent();
range2.clear();
}
function getListMain() {
let domain = '// ここに利用ドメインを記述'
let endFlag = false;
let token = '';
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = ss.getRange("A5:A500");
range.clear();
var s_member = ss.getRange("C1").getValue();
var values = [];
// メッセージ用
var ui = SpreadsheetApp.getUi();
var msg = "";
while(!endFlag){
try {
var groupList = AdminDirectory.Groups.list({
domain: domain, //使用しているドメイン
maxResults: 200, //取得する件数
pageToken: token
});
for(var i = 0; i < groupList.groups.length; i++){
var value = [];
var members = AdminDirectory.Members.list(groupList.groups[i].email).members;
if(members){
for(var j = 0; j < members.length; j++){
if(s_member == members[j].email){
console.log(groupList.groups[i].email);
value.push(groupList.groups[i].email);
values.push(value);
}
}
}
}
if(groupList["nextPageToken"] == null){
console.log("Group nextPageToken null: "+ groupList["nextPageToken"])
endFlag = true;
}else{
token = groupList["nextPageToken"];
}
} catch(error) {
console.log(error);
}
}
ss.getRange(5, 1,values.length,values[0].length).setValues(values);
msg = "完了しました";
ui.alert(msg);
console.log("END")
}
[/shell]
end
ディスカッション
コメント一覧
まだ、コメントがありません