G Suiteに登録されているメーリングリストと、中に入っているユーザーの一覧を取得する


背景

全容はまた書きたいのですが、色々あってメーリングリストに含まれているユーザーを全量把握する必要が出てきた。
ネット検索したら出てくるけど、何故かうまく行かないので結局自分で書きました。

対応

スプレッドシートのスクリプトエディタに書いてください。
あとドメイン名は会社で使っているドメイン名を入れてください。

getGroupUser
//onOpenで書く事でスプレッドシート読み込み時に実行され、ツールバーへ「管理」ー「グループアドレス一覧取得」とメニューが表示されるようになる。
function onOpen() {
  SpreadsheetApp.getUi()
  .createMenu("管理")
  .addItem("グループアドレス一覧取得", "GetGroupUser")
  .addToUi();
}

//以下実際に実行される処理
function GetGroupUser()
{
  // アクティブなシート取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ここにスプレッドシートのシート名を入力');

  // グループ一覧の取得
  var groups = AdminDirectory.Groups.list({
    domain: 'ここはドメイン名を入力してください'
  });

  if(groups) {
    var rows = [];
    var rowcount = 0;

    // ヘッダ行
    rows.push(["GroupAddress", "Description", "Name", "DirectMembersCount", "UserAddress"]);

    // データ行
    for(var i = 0; i < groups.groups.length; i++){           
      // グループに所属するメンバーの取得
      var cols = [];
      var members = AdminDirectory.Members.list(groups.groups[i].email).members    
      if (members) {
        var memlen = members.length;
      }else{
        var memlen = 1;
      }                   

      //メーリングリストにメンバーが含まれている場合の処理
      for (var j = 0; j < memlen; j++){
        cols.push(groups.groups[i].email);
        cols.push(groups.groups[i].description);
        cols.push(groups.groups[i].name);
        cols.push(groups.groups[i].directMembersCount);

        //メンバーが含まれていなかった場合は
        if(members){
          cols.push(members[j].email);
        }else{
          cols.push("");          
        }
        // 行追加
        rows.push(cols);
        var cols = [];         
        // 最終的な行数計算
        rowcount = rowcount + 1;
      }
    }   
    // 書き込み
    sheet.getRange(1, 1, rowcount +1 , 5).setValues(rows);
  } 
}

こんな感じでメニューとして表示されます。