ユーザーの参加グループを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
ディスカッション
コメント一覧
まだ、コメントがありません