G Suiteユーザーのエイリアス設定をリスト化するスクリプトを作った話

ドチャクソ複雑になったアカウントを整理していたところ、どうもエイリアスの設定がされているユーザーが一定数いることがなんとなくわかりました。
結婚等で苗字が変わったりしたときにエイリアスで対応してたりしているようです。

たとえば、山田さんが結婚して鈴木さんになったとします。

G Suiteアカウント → yamada@hogehoge.co.jp
エイリアスsuzuki@hogehoge.co.jp

これだけなら特に何も困りませんが、問題なのは別サービスのアカウント。

プロビジョニングで自動化しているイケイケな会社だと問題ないかもしれませんが、まだ発展途上な弊社は手動でサービスごとにアカウントを追加しています(ヤメタイ)

G Suiteyamada@hogehoge.co.jp なのに、slacksuzuki@hogehoge.co.jp みたいなことが起こっていて、slackユーザーを yamada@hogehoge.co.jp で調べても出てこないわけです。
ユーザーリストをcsv出力して突合する場合も引っかからず、手作業で確認するハメになっています。。

ならばせめて誰がどんなエイリアス設定をしているのか知りたい!
と思って管理コンソールを弄るも、エイリアスの出力機能は無い模様…(以前はあった)

APIを使えばできそうなことはわかっていたので、諦めて作ることにしたのでした。

目的

  • エイリアス設定をしているユーザーを炙り出し抽出してリスト化する
  • 誰がどんなエイリアスを設定しているかわかれば良い(必要最低限の機能)

手法

Users.aliases:list のAPIを使います。
Users.aliases: list  |  Directory API  |  Google Developers

このAPIだけだと、1人のユーザーの結果しか取得できなさそうなので、エイリアスを調べる前にUsers:listでドメインユーザー全体を取得します。
Users: list  |  Directory API  |  Google Developers

作成手順

スプレッドシート作成

まずはスプレッドシートを作ります。

f:id:simple-josys:20200901204041p:plain:w400

f:id:simple-josys:20200901204327p:plain:w400

作ったら適当に名前を付けておきましょう。なんでも良いです。

f:id:simple-josys:20200901204851p:plain:w400

アドレスバーのこの部分は後で使うのでコピーしておきます。

プロジェクトを作る

スプレッドシートの画面の、「ツール」→「スクリプトエディタ」からプロジェクトを開きます。

f:id:simple-josys:20200901205317p:plain:w400

名前は適当で良いです。

今回使用するAPIを使えるようにします。
「リソース」→「Google の拡張サービス...」を開きます。

f:id:simple-josys:20200901205656p:plain:w400

Admin SDK directory_v1と書いてあるところの右のボタンを押します(コイツいっつも崩れてんな)

f:id:simple-josys:20200901210026p:plain:w400

OKを押して準備完了です。

f:id:simple-josys:20200901210329p:plain:w400

コードを書く(コピペ)

あとは後述のコードをコピペして、最初に書いてある

を変更するだけです。

f:id:simple-josys:20200901204851p:plain:w100スプレッドシートのID

実行結果のイメージはこんな感じです。

f:id:simple-josys:20200901214136p:plain:w400

一人が複数個のエイリアスを設定していても大丈夫です。

コード

コードの解説はコメントアウトで記述しているので、特にありません。

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

f:id:simple-josys:20200901214354p:plain:w400