我正在尝试提取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
,我是否知道自己在做错什么?
答案 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帮助我。