🐴

GAS:Googleグループ管理詰め合わせ

2021/01/28に公開

Googleグループを出力する

概要

対象ドメインのGoogleグループを出力する。
500以上Hitする場合の処理は未記載。

ソース

function exportGoogleGroup() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];スプレッドシートの1つ目のシートを選択
 //対象ドメイン
  var domainName = 'yourdomain.com';
 
 //取得するグループの最大数(デフォルトは200)
 var maxResults = 500;

 //シートをクリア
 sheet.clear();
  
 var values = [];
 
 //ヘッダー追加
 values.push([
   "メールアドレス",
   "グループ名",
   "説明",
   "メンバー数",
   "WhoCanJoin",
   "whoCanViewMembership",
   "whoCanViewGroup",
   "whoCanInvite",
   "whoCanAdd",
   "allowExternalMembers",
   "whoCanPostMessage",
   "allowWebPosting",
   "maxMessageBytes",
   "isArchived",
   "archiveOnly",
   "messageModerationLevel",
   "spamModerationLevel",
   "showInGroupDirectory",
   "whoCanLeaveGroup",
   "whoCanContactOwner",
   "whoCanApproveMembers",
   "whoCanBanUsers",
   "whoCanModifyMembers",
   "whoCanApproveMessages",
   "whoCanDiscoverGroup",
   "CanContactOwner",
   "whoCanJoin",
 ]);
 
 //グループ一覧の取得
 var groupsList = AdminDirectory.Groups.list({domain: domainName, maxResults: maxResults});
  
 if(groupsList) {
   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 group = AdminGroupsSettings.Groups.get(groupsList.groups[i].email);
     value.push(group["whoCanJoin"]);
     value.push(group["whoCanViewMembership"]);
     value.push(group["whoCanViewGroup"]);
     value.push(group["whoCanInvite"]);
     value.push(group["whoCanAdd"]);
     value.push(group["allowExternalMembers"]);
     value.push(group["whoCanPostMessage"]);
     value.push(group["allowWebPosting"]);
     value.push(group["maxMessageBytes"]);
     value.push(group["isArchived"]);
     value.push(group["archiveOnly"]);
     value.push(group["messageModerationLevel"]);
     value.push(group["spamModerationLevel"]);
     value.push(group["showInGroupDirectory"]);
     value.push(group["whoCanLeaveGroup"]);
     value.push(group["whoCanContactOwner"]);
     value.push(group["whoCanApproveMembers"]);
     value.push(group["whoCanBanUsers"]);
     value.push(group["whoCanModifyMembers"]);
     value.push(group["whoCanApproveMessages"]);
     value.push(group["whoCanDiscoverGroup"]);
     value.push(group["whoCanContactOwner"]);
     value.push(group["whoCanJoin"]);
     values.push(value); 
   }
   
   //取得したデータをスプレッドシートにセット
   sheet.getRange(1, 1, groupsList.groups.length + 1 , 27).setValues(values);
 } 
}

Googleグループを作成

概要

スプレッドシートから値を取得して、
予め定めたセキュリティ設定を指定してGoogleグループを作成できる。

入力シートの見た目

ソース

function createGoogleGroup() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[1];//スプレッドシートの2つ目のシートを選択
 var lastColum = sheet.getLastColumn();
 var lastRow = sheet.getLastRow();
 var startRow = 2;  
 var numRows = lastRow - 1;     
 var dataRange = sheet.getRange(startRow, 1, numRows, lastColum);
 var data = dataRange.getValues();

 for (var i = 0; i < data.length; ++i) {
   var row = data[i];
   
   row.rowNumber = i + 2;
   
   //Result列がブランクであれば処理を実行    
   if (!row[3]) { 
     var result = "";
     
     try
     {
       AdminDirectory.Groups.insert({email: row[0], name: row[1], description: row[2]});     
       
       //Groupのプロパティ更新
       var group = AdminGroupsSettings.Groups.get(row[0]);
       group.whoCanViewMembership = "ALL_IN_DOMAIN_CAN_VIEW";
       group.whoCanViewGroup = "ALL_MEMBERS_CAN_VIEW";
       group.whoCanPostMessage = "ANYONE_CAN_POST";
       group.whoCanModerateMembers = "OWNERS_AND_MANAGERS";
       group.whoCanJoin = "CAN_REQUEST_TO_JOIN";
       group.whoCanLeaveGroup = "NONE_CAN_LEAVE";
       group.whoCanDiscoverGroup = "ALL_IN_DOMAIN_CAN_DISCOVER";
       group.isArchived = "true";
       group.spamModerationLevel = "ALLOW";
       group.allowExternalMembers = "true";
       group.whoCanContactOwner = "ALL_MEMBERS_CAN_CONTACT";
       group.whoCanJoin = "INVITED_CAN_JOIN";
       AdminGroupsSettings.Groups.patch(group, row[0]);
       
       result = "Success"; 
     }catch(e){
       result = "Error:" + e;
     }
     
     //実行結果をResult列にセット
     sheet.getRange(row.rowNumber, 4).setValue(result); 

   }
 }  
}

Googleグループを編集

概要

スプレッドシートから値を取得して、
予め定めたセキュリティ設定を指定してGoogleグループを編集できる。

入力シートの見た目

ソース

function changeGoogleGroup() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[2];//スプレッドシートの3つ目のシートを選択
 var lastColum = sheet.getLastColumn();
 var lastRow = sheet.getLastRow();
 var startRow = 2;  
 var numRows = lastRow - 1;     
 var dataRange = sheet.getRange(startRow, 1, numRows, lastColum);
 var data = dataRange.getValues();

 for (var i = 0; i < data.length; ++i) {
   var row = data[i];
   
   row.rowNumber = i + 2;
   
   //D列がブランクであれば処理を実行    
   if (!row[3]) { 
     var result = "";
     
     try
     {     
       //Groupのプロパティ更新

       var group = AdminGroupsSettings.Groups.get(row[0]);
       group.name =row[1];
       group.description =row[2];
       group.whoCanViewMembership = "ALL_IN_DOMAIN_CAN_VIEW";
       group.whoCanViewGroup = "ALL_MEMBERS_CAN_VIEW";
       group.whoCanPostMessage = "ANYONE_CAN_POST";
       group.whoCanModerateMembers = "OWNERS_AND_MANAGERS";
       group.whoCanJoin = "CAN_REQUEST_TO_JOIN";
       group.whoCanLeaveGroup = "NONE_CAN_LEAVE";
       group.whoCanDiscoverGroup = "ALL_IN_DOMAIN_CAN_DISCOVER";
       group.isArchived = "true";
       group.spamModerationLevel = "ALLOW";
       group.allowExternalMembers = "true";
       group.whoCanContactOwner = "ALL_MEMBERS_CAN_CONTACT";
       group.whoCanJoin = "INVITED_CAN_JOIN";
       AdminGroupsSettings.Groups.patch(group, row[0]);
       
       result = "Success"; 
     }catch(e){
       result = "Error:" + e;
     }
     
     //実行結果をResult列にセット
     sheet.getRange(row.rowNumber, 4).setValue(result); 

   }
 }  
}

メンバー追加or削除

概要

スプレッドシートから値を取得して、
予め定めたセキュリティ設定を指定してGoogleグループを編集できる。

入力シートの見た目

ソース

function modifyGoogleGroupMember(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[3];//スプレッドシートの4つ目のシートを選択
var lastColum = sheet.getLastColumn();
var lastRow = sheet.getLastRow();
var startRow = 2;  
var numRows = lastRow - 1;     
var dataRange = sheet.getRange(startRow, 1, numRows, lastColum);
var data = dataRange.getValues();
 
   for (var i = 0; i < data.length; ++i) {
   var row = data[i];
   
   row.rowNumber = i + 2;
   
   //Result列がブランクであれば処理を実行    
   if (!row[3]) { 
     var result = "";
     
     try
     {

       if(row[1] == "add")
       {
         result = AdminDirectory.Members.insert({email: row[2], role: "MEMBER"}, row[0]);
         result = "Success"; 
       }else if(row[1] == "remove")
       {
         result = AdminDirectory.Members.remove(row[0], row[2]);
         result = "Success"; 
       }else{
         result = "Error:Actionパラメータに誤りがあります。add/removeのいずれかをセットしてください。"
       }
     }catch(e){
       result = "Error:" + e;
     }
     
     //実行結果をResult列にセット
     sheet.getRange(row.rowNumber, 4).setValue(result); 

   }
 }  
}

利用する前に

以下二つのAPI追加が必要。

  • Admin SDK API:AdminDirectory
  • Groups Settings API
  1. リソース→Googleの拡張サービス
  2. Admin SDK API:AdminDirectoryをOnに変更
  3. Groups Settings API をOnに変更

トラブルシュートFAQ

Q. 実行するとこんなエラーがでました

とか

とか。

A. Admin Directory APIを追加してください

追加したら再度実行して承認する

Q. またこんなエラーが!

A. Groups Settings APIを追加してください

追加したら再度実行して承認する

以上、他何かあればコメントください。

Discussion