Google apps script 使用谷歌应用程序脚本从管理目录API获取部门用户
我有以下(大部分)使用管理目录API的工作脚本。但是,我不想拉整个域,我只想拉一个特定部门的信息Google apps script 使用谷歌应用程序脚本从管理目录API获取部门用户,google-apps-script,google-sheets,google-admin-sdk,Google Apps Script,Google Sheets,Google Admin Sdk,我有以下(大部分)使用管理目录API的工作脚本。但是,我不想拉整个域,我只想拉一个特定部门的信息 function listAllUsers() { var ss = SpreadsheetApp.getActive(); var pageToken, page, count = 0; var listArray = []; listArray.push(['full name', 'first name', 'last name', 'email', 'department',
function listAllUsers() {
var ss = SpreadsheetApp.getActive();
var pageToken, page, count = 0;
var listArray = [];
listArray.push(['full name', 'first name', 'last name', 'email', 'department', 'ID'])
do {
page = AdminDirectory.Users.list({
domain: 'example.co.uk',
orderBy: 'givenName',
maxResults: 100,
pageToken: pageToken
});
var users = page.users;
if (users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
listArray.push([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, user.organizations, user.id,]);
}
}
pageToken = page.nextPageToken;
break; // This means you only get one page
} while (pageToken);
try {
var outputSheet = ss.getSheetByName('allMembers');
outputSheet.getDataRange();
} catch(err) {
var outputSheet = ss.insertSheet('allMembers', 2);
}
outputSheet.getDataRange().clear();
outputSheet.getRange(1, 1, listArray.length, listArray[0].length).setValues(listArray);
outputSheet.getRange(1, 6, outputSheet.getLastRow(), 4).setHorizontalAlignment("center");
outputSheet.getRange(1, 1, outputSheet.getLastRow(), 1).setHorizontalAlignment("center");
var width = [150, 150, 180, 250, 250, 200];
formatSheet(outputSheet, width);
}
函数listalUsers(){
var ss=SpreadsheetApp.getActive();
var pageToken,page,count=0;
var listary=[];
push(['full name','first name','last name','email','department','ID'])
做{
page=AdminDirectory.Users.list({
域名:“example.co.uk”,
订购人:“givenName”,
最大结果:100,
pageToken:pageToken
});
var users=page.users;
如果(用户){
对于(var i=0;i
我尝试使用user.organization[].domain筛选到域,但刚收到错误消息。我将参数user.organizations
更改为user.organizations[].department
,如文档所示
这最初抛出了一个语法错误,当更改为user.organizations[0]。department
时抛出错误消息:
TypeError:无法从未定义中读取属性“0”
我完全省略了括号,使用了user.organizations.department
,但得到了:
TypeError:无法从未定义中读取属性“department”
另外,如果可能的话,我想把部门和职位分开列出。目前,它以以下格式导出信息:
{customType=work,name=,location=002,title=Technical Support Manager,department=Technical Support,primary=true}
当前显示:我想要的输出格式:
您收到这些错误是因为您域中的某些用户没有department/title user属性 添加2个变量并
尝试。。catch
块应允许代码按预期工作
以下是更新的代码:
function listAllUsers() {
var ss = SpreadsheetApp.getActive();
var pageToken,
page,
count = 0;
var listArray = [];
listArray.push(['full name', 'first name', 'last name', 'email', 'department', 'title', 'ID'])
do {
page = AdminDirectory.Users.list({
domain : 'example.com',
orderBy : 'givenName',
pageToken : pageToken
});
var users = page.users;
if (users) {
for (var i = 0; i < users.length; i++) {
var user = users[i];
var department,
title; // Addded two new variables
try { // Try to get the users department if there is an error push the error to the array
department = user.organizations[0].department;
} catch (e) {
department = e
}
try {// Try to get the users title if there is an error push the error to the array
title = user.organizations[0].title;
} catch (e) {
title = e
}
listArray.push([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, department, title, user.id, ]);
}
}
pageToken = page.nextPageToken;
break; // This means you only get one page
} while (pageToken);
try {
var outputSheet = ss.getSheetByName('allMembers');
outputSheet.getDataRange();
} catch (err) {
var outputSheet = ss.insertSheet('allMembers', 2);
}
outputSheet.getDataRange().clear();
outputSheet.getRange(1, 1, listArray.length, listArray[0].length).setValues(listArray);
outputSheet.getRange(1, 6, outputSheet.getLastRow(), 4).setHorizontalAlignment("center");
outputSheet.getRange(1, 1, outputSheet.getLastRow(), 1).setHorizontalAlignment("center");
var width = [150, 150, 180, 250, 250, 200];
formatSheet(outputSheet, width);
}
使用ADMINSDK和查询,您可以基于OrgName、ManagerId、Ref Link等属性进行查询。 在您的请求中传递查询
var queryStr="orgDepartment=HR"
var page = AdminDirectory.Users.list({
domain : 'example.com',
orderBy : 'givenName',
pageToken : pageToken,
query:queryStr
});
如果您尝试以一种方式执行此操作并获取错误消息,那么共享所述代码和所述错误消息是否有意义?您是否尝试过其他查询?另外,你的部门和职位已经是独立的价值观,所以我不确定你有什么困难。我已经更新了帖子,展示了我的尝试,并提供了一些截图来更好地解释事情。谢谢詹姆斯,我会看看这个。我使用的是目录API文档(它适用于我试图查找的其他值)。对不起,用户|目录API文档。是的,文档非常分散。如果它不起作用,请发回并通知我们,我将设置字段并在我的域上测试它们。看起来我们没有使用这些字段。只是作为未定义的返回。我们使用GADs将AD同步到G套件中,这是它从中提取部门信息的地方。即使是我也面临着同样的问题——我使用的任何解决方案都是“user.organizations[0]。Department o和user.organizations[0]。title”
var queryStr="orgDepartment=HR"
var page = AdminDirectory.Users.list({
domain : 'example.com',
orderBy : 'givenName',
pageToken : pageToken,
query:queryStr
});