在一个有用的回应中这个帖子 https://stackoverflow.com/questions/34398021/directory-query-returns-only-100-users我了解到我可以一次从我的域目录中提取最多 500 个用户结果。现在,我试图让一个脚本继续运行并批量提取 500 个用户,直到它从域(或者在本例中为 OU)中提取所有用户并将它们全部添加到同一个电子表格中。
现在我的代码如下所示:
function writeToSpreadsheet(){
var values = [];
var users = AdminDirectory.Users.list({
domain:'klht.org',
maxResults: 500,
query: "orgUnitPath=/CleverTeachers/King"
}).users;
for (var i=0; i<users.length; i++){
values.push([users[i].name.fullName, users[i].primaryEmail]);
}
var spreadsheetID = '1JLDD2wm0_udmTn9ZHvdKhL_Ok3SvKYFqkBeiA1GdnYc';
SpreadsheetApp.openById(spreadsheetID).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
}
我上一篇文章的评论者指出“返回对象的一部分将是‘nextPageToken’,您可以将其添加到后续查询中,直到拥有所有用户为止。”他添加了以下片段:
var usersPage2 = AdminDirectory.Users.list({
domain: 'klht.org',
maxResults: 500,
query: "orgUnitPath=/OU",
pageToken: nextPageToken
}).users;
我发现简单地将其附加在上面的代码下方会引发“ReferenceError:“nextPageToken”未定义。(第 13 行,文件“Code”)”。现在我又被困住了。你能帮我完成这项工作吗?
the nextPageToken
我在前面的答案中提到的是第一个查询结果的属性。
为了最好地处理示例中未确定的最大用户数,您最好将查询包装到 AdminSDK 中,并在 while 循环中进行处理,一旦没有更多用户可供查找,该循环就会终止:
function writeToSpreadsheet(){
var values = [],
users = [],
userListQuery = {},
nextPageToken = '',
listObject = {
domain:'klht.org',
maxResults: 500,
query: "orgUnitPath=/CleverTeachers/King"
},
i = 0,
spreadsheetID = '1JLDD2wm0_udmTn9ZHvdKhL_Ok3SvKYFqkBeiA1GdnYc';
do {
if (nextPageToken && nextPageToken !== '') {
listObject.pageToken = nextPageToken;
}
userListQuery = AdminDirectory.Users.list(listObject);
// if there are more users than fit in the query a nextPageToken is returned
nextPageToken = userListQuery.nextPageToken;
// Add the query results to the users array
users = users.concat(userListQuery.users);
} while (nextPageToken);
for (i = 0; i < users.length; i += 1) {
values.push([users[i].name.fullName, users[i].primaryEmail]);
}
SpreadsheetApp.openById(spreadsheetID).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)