在G-suite Admin SDK中获取所有已暂停用户的详细信息

时间:2018-06-20 20:40:18

标签: google-apps-script google-admin-sdk gsuite

我正在尝试提取G-Suite Admin SDK中所有已暂停用户的详细信息,为此我在Google Apps脚本中编写了一个查询:

function fetchUser(){           
    var pageToken;
    var membersList = AdminDirectory.Users.list({
      domain: 'xyz.com',
      orderBy: 'email',
      query: isSuspended=true,
      maxResults: 100,
      pageToken: pageToken
    });  
    Logger.log('membersList:' +membersList);
}

我进入logs的结果是:

[18-06-20 16:32:15:413 EDT] membersList:{"kind":"admin#directory#users","etag":"\"npJcgeAc7XbfkhvPm3glLSpkcPU/HMFwD2wLX237BRmKZQUJYB5ZE7U\""}

我无法看到G-suite-admin-SDK中提到的响应中的用户列表,其中说响应应该类似于:

{
  "kind": "admin#directory#users",
  "etag": etag,
  "users": [
    users Resource
  ],
  "nextPageToken": string
}

我在搜索查询中使用了search-users文档,说使用isSuspended=true,我是否知道自己在做错什么?

2 个答案:

答案 0 :(得分:1)

根据您链接的API文档,查询参数必须为string。您提供的查询无效-query: isSuspended=true-因此不执行查询。

您可能会对"Search for Users" API文档中使用看似“原始”变量和参数的示例感到困惑-这是因为它提供的示例仍然需要进行网址编码

  

示例

     

所有查询都使用users.list方法,该方法具有类似于以下内容的HTTP请求(为了便于阅读,包含了换行符):

     

获取https://www.googleapis.com/admin/directory/v1/users
  ?domain =主域
  &query =查询参数

     

查询参数必须经过URL编码。例如,查询query=givenName:Jane*的URL编码为query=givenName%3AJane*。此页面上的所有示例均显示未编码的查询参数。客户端库会自动处理此URL编码。

您可以通过重新使用options变量来帮助自己并改善代码,例如:

function getAllSuspended() {
  // Set the constant options only once.
  const options = {
    domain: 'xyz.com',
    orderBy: 'email',
    query: 'isSuspended=true',
    maxResults: 100,
    fields: "nextPageToken,users"
  };
  // Could log the options here to ensure they are valid and in the right format.

  const results = [];
  do {
    var search = AdminDirectory.Users.list(options);
    // Update the page token in case we have more than 1 page of results.
    options.pageToken = search.nextPageToken;
    // Append this page of results to our collected results.
    if(search.users && search.users.length)
      Array.prototype.push.apply(results, search.users);
  } while (options.pageToken);

  return results;
}

客户端库和应用脚本

Apps脚本中的"advanced services"是封装底层REST API的Google API客户端库,因此您无需对传递给其方法的参数执行URL编码。如果您决定不想使用客户端库,而是希望使用UrlFetchApp来查询URL,则需要对查询字符串进行URL编码。 (如果要发出许多简单,快速,不相关的请求,并且客户端库不提供BatchHttpRequest方法,则可以执行此操作:可以将UrlFetchApp.fetchAll用于better performance。)

答案 1 :(得分:0)

这是一个简单的错误:

function fetchUser(){           
        var pageToken;
        var membersList = AdminDirectory.Users.list({
          domain: 'xyz.com',
          orderBy: 'email',
          query: "isSuspended=true",
          maxResults: 100,
          pageToken: pageToken
        });  
        Logger.log('membersList:' +membersList);
    }

感谢@tehhowch帮助我。