Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
36
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@ttyokoyama

GASでAdmin SDKを利用する(Directory編)その1

とりあえず、(ネタとして)前置き

Google Appsの管理者の皆さん、こんにちは。
日々、Appsのユーザ管理や、状況把握について、頭を悩ませているのではないでしょうか。

最近、GASにAdmin SDKのAPIが追加されたようなので、使ってみました。
今回は、Directory APIでユーザリストの取得方法を紹介します。
(少し、ユーザの情報が取れるようなので、活用していただけたらと思っています。)

本日のコード

コード.gs
function listAllUsers() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var users = AdminDirectory.Users.list({
    domain: '[your domain]'
  });

  if(users) {
    var cells = [];
    cells.push(["fullName", "isAdmin", "isDelegatedAdmin", "isMailboxSetup", "creationTime", "password"]);
    for(var i = 0; i < users.users.length; i++) {
      var rows = [];
      rows.push(users.users[i].name.fullName);
      rows.push(users.users[i].isAdmin);
      rows.push(users.users[i].isDelegatedAdmin);
      rows.push(users.users[i].isMailboxSetup);
      rows.push(users.users[i].creationTime);
      rows.push(users.users[i].password); 

      cells.push(rows);
    }
    sheet.getRange("A1:F4").setValues(cells);
  }
}

実行時に認証が必要です。

忘れてはいけない、Apps版コンソールのAPI有効化

これがないと、GASの設定をいくらしても、何もできません…。
Apps版の設定.png

GAS側の拡張サービスをONにする

DirectoryAPI承認.png

Developers Console側でAPIを有効にする。

CloudConsole認証.png

実行時に承認

実行時承認.png

解説

今回のコードは、Admin SDKのDirectory APIを実行した結果をSpreadsheetに吐き出しました。
名前(フルネーム)、管理者かどうか、委任管理者かどうか、メールボックスのセットアップ済か、アカウント作成日、パスワード(!?)を取得して表示しています。

GASのドキュメントは、現状では、サンプルコードの提示のみとなっているので、
API本体のドキュメント(https://developers.google.com/admin-sdk/directory/v1/reference/users/list)で確認することになります。

委任管理者というのは、Google Appsの初期値で(?)ユーザ管理者とか、グループ管理者だったりと、制限付きの管理権限が与えられる役割が設定されています。その権限が割り当てられているかどうか。だと思います。
(私の今のApps環境だと全てfalseだったもので…。時間がある時にユーザに設定して確認してみます。)

私の実行環境がApps無料版で、ユーザが3人しかいませんから、上記サンプルで良いですが、ユーザがたくさんいる場合は、APIの制限に引っかかるので、以下のように取得件数の上限と、2ページ目以降を取得するためのTokenを設定して呼び出します。

サンプル.gs
  var users = AdminDirectory.Users.list({
     domain: '[your domain]'
    ,maxResult: [1500までで取得件数を指定]
    ,pageToken: [API実行時に取得したToken]
  });

具体的なコードは本家のサンプルを参照した方がいいかもしれません。
https://developers.google.com/apps-script/advanced/admin-sdk-directory#list_all_users

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
36
Help us understand the problem. What are the problem?