使用 Google Apps 脚本从管理目录 API 按部门获取用户
Get users by Department from Admin Directory API using Google Apps Script
我有以下(大部分)工作脚本使用管理目录 API。但是,我不想提取整个域 - 我只想提取特定部门的信息。
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);
}
我尝试使用 user.organization[].domain 过滤到域,但只是收到错误消息。我将参数 user.organizations
更改为 user.organizations[].department
,如记录 in the Admin SDK reference.
这最初抛出了 SyntaxError,当更改为 user.organizations[0].department
时抛出了错误消息:
TypeError: Cannot read property "0" from undefined
我完全省略了括号并使用了 user.organizations.department
,但是得到了:
TypeError: Cannot read property "department" from undefined
另外,如果可能的话,我想分开列出部门和职位。目前,它以这种格式导出信息:
{customType=work, name=, location=002, title=Technical Support Manager, department=Technical Support, primary=true}
当前显示:
我想要的输出格式:
您收到这些错误是因为您域中的某些用户没有部门/职位用户 属性。
添加 2 个变量和 try.. 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);
}
更新
要仅列出特定部门的用户,您只需在 push
周围添加一个 if
if(department == '--NAME OF DEPARTMENT--'){
listArray.push([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, department, title, user.id,]);
}
使用admin SDK 和查询你可以search user on the basis of attributes like OrgName, ManagerId, Ref Linkenter link description here。
在您的请求中传递查询
var queryStr="orgDepartment=HR"
var page = AdminDirectory.Users.list({
domain : 'example.com',
orderBy : 'givenName',
pageToken : pageToken,
query:queryStr
});
我有以下(大部分)工作脚本使用管理目录 API。但是,我不想提取整个域 - 我只想提取特定部门的信息。
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);
}
我尝试使用 user.organization[].domain 过滤到域,但只是收到错误消息。我将参数 user.organizations
更改为 user.organizations[].department
,如记录 in the Admin SDK reference.
这最初抛出了 SyntaxError,当更改为 user.organizations[0].department
时抛出了错误消息:
TypeError: Cannot read property "0" from undefined
我完全省略了括号并使用了 user.organizations.department
,但是得到了:
TypeError: Cannot read property "department" from undefined
另外,如果可能的话,我想分开列出部门和职位。目前,它以这种格式导出信息:
{customType=work, name=, location=002, title=Technical Support Manager, department=Technical Support, primary=true}
当前显示:
我想要的输出格式:
您收到这些错误是因为您域中的某些用户没有部门/职位用户 属性。
添加 2 个变量和 try.. 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);
}
更新
要仅列出特定部门的用户,您只需在 push
if
if(department == '--NAME OF DEPARTMENT--'){
listArray.push([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, department, title, user.id,]);
}
使用admin SDK 和查询你可以search user on the basis of attributes like OrgName, ManagerId, Ref Linkenter link description here。 在您的请求中传递查询
var queryStr="orgDepartment=HR"
var page = AdminDirectory.Users.list({
domain : 'example.com',
orderBy : 'givenName',
pageToken : pageToken,
query:queryStr
});