I\'m working on a script that gets all goups in my domain and lists all users in these groups.
I rewrote this script because GroupsManager
is deprecated
AdminDirectory MembersCollection might be what you are looking for.
Example snippet:
var members = AdminDirectory.Members.list('testgroup@example.com').members;
for (var i = 0; i < members.length; i++) {
var member = members[i];
switch (member.type) {
case 'USER':
Logger.log('%s is a user', member.email);
break;
case 'GROUP':
Logger.log('%s is a group', member.email);
break;
default:
Logger.log('This will never happen');
}
Some of my customers have groups containing groups contaning groups... forming a group tree with arbitrary depth. I use this code to get all user members in such a group tree:
function walkTreeStack() {
var rootGroup = 'testgroup@example.com';
var groupTreeUsers = [];
var groups = [];
groups.push(rootGroup);
while (groups.length > 0) {
var currentGroup = groups.pop();
var groupName = AdminDirectory.Groups.get(currentGroup).name;
var groupMembers = getAllMembers_(currentGroup);
for (var i in groupMembers) {
if (groupMembers[i].type == 'USER') {
groupTreeUsers.push([groupName, groupMembers[i].email])
}
else if (groupMembers[i].type == 'GROUP') {
groups.push(groupMembers[i].email)
}
}
}
Logger.log('There are %s user members in %s (including sub groups)', groupTreeUsers.length, groupName);
}
function getAllMembers_(group) {
var memberPageToken, memberPage;
var members = [];
do {
memberPage = AdminDirectory.Members.list(group, {
maxResults: 200,
pageToken: memberPageToken
});
var pageMembers = memberPage.members;
if (pageMembers) {
for (var j =0; j < pageMembers.length; j++) {
members.push(pageMembers[j]);
}
}
memberPageToken = memberPage.nextPageToken;
} while (memberPageToken);
return members;
}
It's slightly faster if it's done recursively but I suspect the script might crash due to memory constraints if there are a large number of sub groups and user members:
function getGroupTreeMembers() {
var rootGroup = 'testgroup@example.com';
var groupTreeUsers = [];
walkTreeRecursive_(rootGroup, groupTreeUsers);
var groupName = AdminDirectory.Groups.get(rootGroup).name;
Logger.log('There are %s user members in %s (including sub groups)', groupTreeUsers.length, groupName);
}
function walkTreeRecursive_(rootGroup, groupTreeUsers) {
var groupName = AdminDirectory.Groups.get(rootGroup).name;
var groupMembers = getAllMembers_(rootGroup);
var groups = [];
for (var i in groupMembers) {
if (groupMembers[i].type == 'USER') {
groupTreeUsers.push([groupName, groupMembers[i].email])
}
else if (groupMembers[i].type == 'GROUP') {
groups.push(groupMembers[i].email)
}
}
for (var i in groups) {
walkTreeRecursive_(groups[i], groupTreeUsers);
}
}
For more information please visit:
https://developers.google.com/admin-sdk/directory/v1/reference/members#resource