最高権限のスクリプト
ついにはGoogleAppsスクリプトで、
グループの操作まで可能にしてしまいました。
グループの操作方法に関しては、ネット上のどこにも掲載されていないため、
もしかすると、今のところウチだけ・・・?
ともかく、無料アカウントでは不可能なスクリプトなので、
GoogleAppsを研究するような企業や代理店でなければ、
これを発見するのは、まず不可能ではないでしょうか。
まず、「var groups = GroupsManager.getAllGroups();」
この関数と代入により、「groups」という変数に、グループが配列として代入されます。
つまり、「groups[0]」とすれば、最初のグループを指定、
「groups[0].getId()」で、そのグループのメールアドレスが取得でき、
「groups[0].getName()」で、そのグループの名前(日本語で入力した名前など)
が取得できるという仕組みです。
さらに「var groupMembers = groups[0].getAllMembers()」で、
そのグループのメンバーのメールアドレス(文字列)を
配列で取得する事が可能となります。
他にも、グループの管理者のメールアドレスを取得したり、
グループメンバーや管理者の権限を操作、
そして、グループ自体を作成・削除する関数もあります。
その辺りは、ぜひコード補完を見て調べてみてください(ちょっと投げやり気味ですが…)。
というわけで、とりあえずグループ一覧を
スプレッドシートに並べるスクリプトを掲載します。
残念ながら、無料アカウントでは、これを使用する事はできませんが。
function groupAndMemberGet() { var groups = GroupsManager.getAllGroups(); var mailAddresss = new Array(); for(var i = 0;i < groups.length;i ++){ var groupMembers = groups[i].getAllMembers(); for(var j = 0;j < groupMembers.length;j ++){ if(mailAddresss.length <= 0){ mailAddresss.push(groupMembers[j]); }else{ var inItem = true; for(var k = 0;k < mailAddresss.length;k ++){ if(mailAddresss[k] == groupMembers[j]){inItem = false;} } if(inItem){mailAddresss.push(groupMembers[j]);} } } } var sSheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = sSheet.getActiveSheet(); var test1 = sheet.getMaxRows(); var test2 = groups.length; if(sheet.getMaxColumns() - 2 < groups.length){ var plus = groups.length - sheet.getMaxColumns(); sheet.insertColumns(sheet.getMaxColumns(),plus + 2); } if(sheet.getMaxRows() - 1 < mailAddresss.length){ var plus = mailAddresss.length - sheet.getMaxRows(); sheet.insertRows(sheet.getMaxRows(),plus + 1); } var sheetData = sheet.getRange(1,1,sheet.getMaxRows(),sheet.getMaxColumns()).getValues(); //シートデータ配列を白紙化 for(var i = 0;i < sheetData.length;i ++){ for(var j = 0;j < sheetData[i].length;j ++){ sheetData[i][j] = ""; } } for(var i = 0;i < groups.length;i ++){ sheetData[0][i + 1] = groups[i].getId(); sheetData[1][i + 1] = groups[i].getName(); } for(var i = 0;i < mailAddresss.length;i ++){ sheetData[i + 2][0] = mailAddresss[i]; } sheet.getRange(1,1,sheet.getMaxRows(),sheet.getMaxColumns()).setValues(sheetData); sheet.setFrozenRows(2); sheet.setFrozenColumns(1); sheet.getRange(1,1,2,sheet.getMaxColumns()).setBackgroundRGB(239, 239, 239).setHorizontalAlignment("center"); sheet.getRange(1,1,sheet.getMaxRows(),1).setBackgroundRGB(239, 239, 239); } function groupDataGet(){ var groups = GroupsManager.getAllGroups(); var sSheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = sSheet.getActiveSheet(); var sheetData = sheet.getRange(1,1,sheet.getMaxRows(),sheet.getMaxColumns()).getValues(); //シートデータ配列を白紙化(左上端を除く) for(var i = 2;i < sheetData.length;i ++){ for(var j = 1;j < sheetData[i].length;j ++){ sheetData[i][j] = ""; } } var checkMach = "○"; for(var i = 0;i < groups.length;i ++){ for(var j = 1;j < sheetData[0].length;j ++){ if(sheetData[0][j] == groups[i].getId()){ var groupMembers = groups[i].getAllMembers(); for(var k = 2;k < sheetData.length;k ++){ for(var l = 0;l < groupMembers.length;l ++){ if(sheetData[k][0] == groupMembers[l]){ sheetData[k][j] = checkMach; } } } } } } sheet.getRange(1,1,sheet.getMaxRows(),sheet.getMaxColumns()).setValues(sheetData); sheet.getRange(3,2,sheet.getMaxRows(),sheet.getMaxColumns()).setHorizontalAlignment("center"); }
まだまだ無駄の多いスクリプトとは思いますが、
列や行が足りなければ追加したり、セルの配色や固定なども行って、
見やすくなるようには工夫したつもりです。
しかしグループといえば、
それ自体を別目的のメールアドレスにも使用でき、
多数のアカウントが配属しているとなれば、
その操作は、より慎重でなければなりません。
取得するだけなら、まだ気軽に行える部分ですが、
メンバーを追加・離脱させたりする操作などは、
自動で容赦なく動くスクリプトならば、大きな混乱を生じかねません。
まずは別途テスト用のグループを作成し、そこでテストを行った上で、
より計画的に動作させるのが良いでしょう。
そしてもうひとつ注意点があります。
グループの取得、メンバーの取得は、数が多いほどその動作は重くなっていき、
おそらく100人ほど利用しているドメインなら、
もしかしたら処理に時間がかかり、
許容時間を超え、スクリプトが停止するかもしれません。
これはグループ操作に限った話ではなく、
例えばドライブ上で新規ファイルを作成する作業や、
別途スプレッドシートにアクセスする作業などを
ループで何度も繰り返す動作を行うと、スクリプトは停止します。
なので、グループを取得、ユーザーを取得、グループを設定といった
一連の作業を一括で全て行うのではなく、
それらを分割して行う事も考えたほうがいいかもしれません。
むしろ手動でそれらの操作を行っていくようにする事で、
責任の伴う動作を、より慎重に行うキッカケにもなるはずです。
実は言うと、このグループ操作が可能になる関数を発見したキッカケは、
自分自身のアカウントのメールアドレスを取得する方法を探していたときです。
スプレッドシートに、追加のメニューを作成して動作させると、
動作させたアカウントがスクリプトを動かす事になるので、
そのアカウントのメールアドレスを取得したいと思ったからです。
最初は意外とその関数が見つからず、ドライブ上にファイルを作成して、
その管理者(作成者である自分)のメールアドレスを取得するという、
原始的な方法を考えていました。
そこで、もっといい方法はないかと、
デバッグモードで出る「this」という物を調べてみて、
偶然グループを作成する方法を発見しました。
「this」を見ると、グループ以外にも、
ドメイン内のユーザーもある程度操作できそうですし、
どうやら、ユーザーのパスワードの変更さえも可能となりそうです
(取得は不可能ですが)。
もちろん、自分のメールアドレスを取得する方法も別に見つけましたが、
ここまで色々と見つかると、管理ツールとしての可能性も見出せそうです。