Google Apps ScriptでAdmin SDK Directory Serviceを使ってグループメンバー情報を出力する
2020/09/07
GoogleAppsのGoogleGroupをメーリングリストとして使っている人がほとんどだと思うのですが、メンバーの一覧って見る画面がないので、いちいちGroupのメンバーを開くか、他のファイルで管理したりって事で、棚卸しする時に面倒なので、今現在どのメールアドレスがメンバーになっているのかを出力する事はGoogle Apps Scriptで簡単に出来ないかと思って調べてみたら簡単に出来たので記載します。
Admin SDK Directory Serviceを有効にする
今時点では試験運用中のGoogleの拡張サービスなので、
スクリプトエディタで[リソース]-[Googleの拡張サービス]で「Admin Directory API」をONにする。
同じ画面の下にリンクで「Googleデベロッパーコンソール」があるのでそこからGoogleデベロッパーコンソールでも、「Admin SDK」を有効にしておく。
グループメンバーを確認する方法
下のコードをSpreadSheetの[ツール]-[スクリプトエディタ]に書いて、実行したら、とりあえずSpreadSheetに今の設定が書き出せます。
ドメインとかメールアドレスとかは編集して自己責任で参考にしてください。
詳細は公式のAdmin SDK Directory Serviceのページを確認してください。
簡単に説明します。
「page = AdminDirectory.Groups.list~」で指定ドメインのGoogleGroupのリストをpage変数に代入します。
で、「page.groups」をループでまわして、
「var members = AdminDirectory.Members.list(group.email).members」でグループメンバーを代入します。
で、次はメンバーをループでまわしながら、
「user = AdminDirectory.Users.get(member.email)」でユーザ情報を代入します。
※ user.name.fullNameの漢字名が必要だったため。
※ ドメイン外のメールアドレスが含まれる事を考慮したかったのですが、「AdminDirectory.Users.get」でエラーになる事しか分からなかったので、try~catchにしてます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
function listAllGroupsMembers() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var k = 2; var pageToken, page; do { page = AdminDirectory.Groups.list({ domain: 'xxxxxx.xx.xx', maxResults: 300, pageToken: pageToken }); var groups = page.groups; if (groups) { for (var i = 0; i < groups.length; i++) { var group = groups[i]; var members = AdminDirectory.Members.list(group.email).members; if (members){ for (var l = 0;l < members.length;l++){ var member = members[l]; if (sheet.getRange(k,2) + sheet.getRange(k,3) == group.email + member.email){ }else{ sheet.getRange(k,1).setValue(group.name); sheet.getRange(k,2).setValue(group.email); sheet.getRange(k,3).setValue(member.email); var user; try{ user = AdminDirectory.Users.get(member.email); if (user){ sheet.getRange(k,4).setValue(user.name.fullName); } }catch(e){ Logger.log(e.message); } k ++; } } } } } else { Logger.log('グループがありません'); } pageToken = page.nextPageToken; } while (pageToken); MailApp.sendEmail("xxxx@xxxxx.xx.xx", "処理完了", "listAllGroupMembersの処理が完了しました。"); } |
(ディレクトリのAPIに触れていると、names.nsfの扱いやすさを思い出します。)
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
youtube-container クラスのheightを調整
当ブログにGoogleカレンダーとかGoogleフォームを埋め込むと、heigh …
-
-
執筆などで使えるグローバルIPアドレス
今さらなんですが、執筆などで使えるグローバルIPアドレスを調べました。 RFC5 …
-
-
ブログの記事が掲載されました(レバテック様)
少し前の話になりますが、登壇する側も聞く側も良い刺激を受けられる!勉強会のレポー …
-
-
PostmanでTwitter API 1.1を使う
AWS Lambda(Python)からTwitterに投稿するで取得した認証情 …
-
-
Google Apps Scriptのマニフェストファイルの編集
こちらの配信ライブカレンダーの仕組みを作っているときに、久しぶりにGoogle …
-
-
PHP 共通ヘッダ、フッタの内容をページによって動的に変更する
共通ヘッダ、フッタ それぞれ必要な内容を書いたheader.php、footer …
-
-
動画間の広告を飛ばすのが面倒になったのでYoutube Premiumに加入しました
テレビのCMは全然見る方なんですが、Youtubeの動画の間の広告ってなんか流し …
-
-
共有Googleカレンダーを自分のカレンダーに追加してiPhoneに同期する
配信ライブカレンダーという共有カレンダーを作りました。 このようなGoogleの …
-
-
WordPressの記事を公開日時に関係なくソート順を変更する
PostMash Customを使う WordPressのプラグインでPostM …
-
-
GoogleAppsScriptを使ってGmailをSpreadSheetにエクスポートする
GoogleAppsScriptを使ってGmailをSpreadSheetにエク …