G Suiteユーザーのエイリアス設定をリスト化するスクリプトを作った話
ドチャクソ複雑になったアカウントを整理していたところ、どうもエイリアスの設定がされているユーザーが一定数いることがなんとなくわかりました。
結婚等で苗字が変わったりしたときにエイリアスで対応してたりしているようです。
たとえば、山田さんが結婚して鈴木さんになったとします。
G Suiteアカウント → yamada@hogehoge.co.jp
エイリアス → suzuki@hogehoge.co.jp
これだけなら特に何も困りませんが、問題なのは別サービスのアカウント。
プロビジョニングで自動化しているイケイケな会社だと問題ないかもしれませんが、まだ発展途上な弊社は手動でサービスごとにアカウントを追加しています(ヤメタイ)
G Suiteは yamada@hogehoge.co.jp なのに、slackは suzuki@hogehoge.co.jp みたいなことが起こっていて、slackユーザーを yamada@hogehoge.co.jp で調べても出てこないわけです。
ユーザーリストをcsv出力して突合する場合も引っかからず、手作業で確認するハメになっています。。
ならばせめて誰がどんなエイリアス設定をしているのか知りたい!
と思って管理コンソールを弄るも、エイリアスの出力機能は無い模様…(以前はあった)
APIを使えばできそうなことはわかっていたので、諦めて作ることにしたのでした。
手法
- GASに処理させてスプレッドシートに結果を出す
Users.aliases:list のAPIを使います。
Users.aliases: list | Directory API | Google Developers
このAPIだけだと、1人のユーザーの結果しか取得できなさそうなので、エイリアスを調べる前にUsers:listでドメインユーザー全体を取得します。
Users: list | Directory API | Google Developers
作成手順
コード
コードの解説はコメントアウトで記述しているので、特にありません。
function AliasesList() { //----------変更箇所---------- var spreadSheetID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; var domainName = "hogehoge.co.jp"; //---------------------------- var ss = SpreadsheetApp.openById(spreadSheetID); var sheet = ss.getSheets()[0]; //ユーザーを格納するための配列 var userList = new Array(); //シートをクリア sheet.clearContents(); //抽出対象の条件 var optional = { domain:domainName, //対象のドメイン maxResults:500 //初期値は100件までなので500件(MAX)に変更 }; //ヘッダー設定 userList.push(["姓","名","アカウント","エイリアス"]); //ユーザー情報の呼び出し var userData = AdminDirectory.Users.list(optional); if(userData.users){ for(var i = 0;i<userData.users.length;i++){ //ユーザー数分リピート var fName = userData.users[i].name.familyName; //姓の取り出し var gName = userData.users[i].name.givenName; //名の取り出し var mail = userData.users[i].primaryEmail; //メールアドレス(G Suiteアカウント)の取り出し var aliasesData = AdminDirectory.Users.Aliases.list(mail); //エイリアス情報の呼び出し if(aliasesData.aliases){ var aliasCount = aliasesData.aliases.length; //いくつエイリアスがあるかカウント for(var j = 0;j<aliasCount;j++){ //エイリアス数だけループ var alias = aliasesData['aliases'][j]['alias']; //エイリアスデータの取り出し var parameter = [fName,gName,mail,alias]; //格納データを整理 userList.push(parameter); //多次元配列に格納する } } } } var rows = userList.length; var cols = userList[0].length; sheet.getRange(1,1,rows , cols).setValues(userList); //シートに書き込む }
まとめ
思っていたより簡単に出来ました。
slackと連携させるとかよりは全然楽だった…!
これでアカウント整理が捗りそうです。
おまけ
いちいちプロジェクト開いて実行するのは面倒なので、実行用のボタンを追加します。
開いたときに実行したり、定期的に実行したりすることもできますが、そこまでの頻度では必要ないと思いますので。。
上記のコードの最後に以下のコードを追加します。
function onOpen() { SpreadsheetApp.getUi() .createMenu("管理") .addItem("エイリアス取得","AliasesList") .addToUi(); }
すると、スプレッドシートを開いたときにボタンが追加されますw