🐣
GAS:200件以上のGoogleグループ(メンバーや設定)の一覧を出力する
前提
デフォルトでは200件しか出力できないが、本スクリプトではpageTokenやwhile文を使うことで200件以上でも出力することが可能となっている。
アカウントの権限
APIアクセスに使用しているアカウントに、グループの管理APIの権限がついている必要がある。権限が無いと、グループを出力できない。
API の追加
スクリプトエディタの左サイドバー「サービス」の[+]を押して、以下2つのAPIを追加する必要がある。
- Admin SDK API
- Groups Settings API
概要
対象のドメインのGoogleグループを出力することができる。
- グループの情報
- グループのメールアドレス
- グループの名前
- グループの説明
- メンバー数
- メンバー
- グループの設定
- アクセス設定(オーナーに連絡、メンバーを表示、会話を表示、投稿を公開、メンバーを管理)
- グループに参加できるユーザー
- 組織外のメンバーの許可
出力された後のスプレッドシート
スクリプト
var ss = SpreadsheetApp.getActiveSpreadsheet();
//実行メニューを作成
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu("GAS実行");
menu.addItem("グループ出力", "exportGoogleGroup");
menu.addToUi();
}
function exportGoogleGroup() {
//スプレッドシートの1つ目のシートを選択
var sheet = ss.getSheets()[0];
//対象ドメイン(example.co.jpの部分を置き換える)
var domain = 'example.co.jp';
var endFlag = false;
var token = '';
//シートをクリア
sheet.clear();
//ヘッダー追加
var values = [];
values.push([
"メールアドレス",
"グループ名",
"説明",
"メンバー数",
"メンバー",
"オーナーに連絡",
"メンバーを表示",
"会話を表示",
"投稿を公開",
"メンバーを管理",
"グループに参加できるユーザー",
"組織外のメンバーの許可",
]);
//オーナーに連絡の設定状況を日本語表示させる
var ownercontact = {
ALL_MANAGERS_CAN_CONTACT: 'グループの管理者',
ALL_MEMBERS_CAN_CONTACT: 'グループのメンバー',
ALL_IN_DOMAIN_CAN_CONTACT: '組織全体',
ANYONE_CAN_CONTACT: '外部'
};
//メンバーを表示と会話を表示の設定状況を日本語表示させる
var access = {
ALL_OWNERS_CAN_VIEW: 'グループのオーナー',
ALL_MANAGERS_CAN_VIEW: 'グループの管理者',
ALL_MEMBERS_CAN_VIEW: 'グループのメンバー',
ALL_IN_DOMAIN_CAN_VIEW: '組織全体',
ANYONE_CAN_VIEW: '外部'
};
//投稿を公開の設定状況を日本語表示させる
var post = {
NONE_CAN_POST: '投稿不可',
ALL_OWNERS_CAN_POST: 'グループのオーナー',
ALL_MANAGERS_CAN_POST: 'グループの管理者',
ALL_MEMBERS_CAN_POST: 'グループのメンバー',
ALL_IN_DOMAIN_CAN_POST: '組織全体',
ANYONE_CAN_POST: '外部'
};
//メンバーを管理の設定状況を日本語表示させる
var managemembers = {
OWNERS_ONLY: 'グループのオーナー',
OWNERS_AND_MANAGERS: 'グループの管理者',
ALL_MEMBERS: 'グループのメンバー'
};
//グループに参加できるユーザーの設定を日本語表示させる
var canjoin = {
ALL_IN_DOMAIN_CAN_JOIN:'組織内のすべてのユーザーが参加できる',
CAN_REQUEST_TO_JOIN:'組織内のすべてのユーザーがリクエストできる',
INVITED_CAN_JOIN:'招待されたユーザーのみ'
};
//組織外のメンバーの許可の設定を日本語表示させる
var allow = {
'false':'不可',
'true':'可'
};
//while文
while(!endFlag){
try{
//グループ一覧の取得
var groupsList = AdminDirectory.Groups.list({
domain: domain,
pageToken: token
});
for(var i = 0; i < groupsList.groups.length; i++){
//グループの基本情報を取得
var value = [];
value.push(groupsList.groups[i].email); //メールアドレス
value.push(groupsList.groups[i].name); //グループ名
value.push(groupsList.groups[i].description); //説明
value.push(groupsList.groups[i].directMembersCount); //メンバー数
//グループのメンバー情報の取得
var members = AdminDirectory.Members.list(groupsList.groups[i].email).members;
//メンバー処理
if (members) {
//メンバーデータをセット
var memberData = '';
for (var j = 0; j < members.length; j++){
//memberData.push(members[j].email);
memberData += members[j].email + '\r\n';
}
value.push(memberData);
} else {
value.push(''); //メンバーなし
}
//グループのプロパティを取得
var group = AdminGroupsSettings.Groups.get(groupsList.groups[i].email);
value.push(ownercontact[group.whoCanContactOwner]); //オーナーに連絡
value.push(access[group.whoCanViewMembership]); //メンバーを表示
value.push(access[group.whoCanViewGroup]); //会話を表示
value.push(post[group.whoCanPostMessage]); //投稿を公開
value.push(managemembers[group.whoCanModerateMembers]); //メンバーを管理
value.push(canjoin[group.whoCanJoin]); //グループに参加できるユーザー
value.push(allow[group.allowExternalMembers]); //組織外のメンバーの許可
values.push(value);
}
if(groupsList["nextPageToken"] == null){
console.log("Group nextPageToken null: "+ groupsList["nextPageToken"])
endFlag = true;
}else{
token = groupsList["nextPageToken"];
}
} catch(error) {
console.log(error);
}
}
//取得したデータをスプレッドシートにセットする
sheet.getRange(1, 1, values.length , 12).setValues(values);
//垂直方向の配置を指定する(上に配置:top, 真ん中に配置:middle, 下に配置:bottom)
sheet.getRange(1, 1, values.length , 12).setVerticalAlignment('middle')
}
Discussion