我正在尝试创建一个脚本,在输入中收集组的电子邮件并解析所有成员以将其添加到CSV文档中。
问题是我的一些组包含其他组,所以我必须递归调用我的函数。并且为了递归地调用它,我需要测试电子邮件地址以了解它是用户还是组。 代码如下:
var USERS = new Array();
var INDEX = 0;
function listAllUsersInGroup(email) {
var temporaryObjectListMember = GroupsManager.getGroup(email).getAllMembers();
for (z=0; z<temporaryObjectListMember.length; z++) {
try {
var group = GroupsManager.getGroup(temporaryObjectListMember[z]);
}
catch (err2){Logger.log(err2)}
if (group != null) { listAllUsersInGroup(group.getId());}
else {
try {
var user = UserManager.getUser(temporaryObjectListMember[z].substring(0,temporaryObjectListMember[z].lastIndexOf('@')));
} catch(err) { Logger.log(err) }
if (user != null) {
USERS[INDEX] = user.getEmail();
INDEX++;
}
}
}
}
我用main来调用这个函数:
function main() {
var email = "grouptest@domain.com";
listAllUsersInGroup(email);
}
当该组包含用户和另一个组时,它在“序列化继续”时出现“意外异常”错误。
在这种情况下,try catch似乎不起作用。
一种解决方案可能是测试电子邮件的类型(用户,组,别名......),但我还没有找到如何做到这一点。
由于 JérémieBECOUSSE
答案 0 :(得分:1)
在对脚本进行少量修改后,它似乎正常工作。
当您创建Google群组时,会自动删除所有别名的成员列表,这样就没有问题。 你必须检查你是否面对其他组或电子邮件地址可以有两种类型: 来自您域名的电子邮件 - &gt;你可以通过用户管理器功能找到它 来自您域外的电子邮件 - &gt;我不相信有一种方法可以在向那些
发送内容之前知道它们是否有效下一个代码将返回您域中的“USERS”用户以及非域名“EXTUSER”用户。 (运行testingIt())
function listAllUsersInGroup(email) {
var temporaryObjectListMember = GroupsManager.getGroup(email).getAllMembers();
for (var z in temporaryObjectListMember) {
var member = temporaryObjectListMember[z];
try {
var group = GroupsManager.getGroup(member);
}
catch (err2){
//Logger.log("is not group: "+err2);
}
if (group != null) {
Logger.log(member+" is a group");
listAllUsersInGroup(member);
}
else {
try {
var user = UserManager.getUser(member.split('@')[0]);
} catch(err) {
//Logger.log("it's not a known mail: "+err);
EXTUSERS.push(member);
}
if (user != null) {
USERS.push(member);
}
}
}
Logger.log("end of the group");
}
var EXTUSERS = [];
var USERS = [];
function testingIt(){
listAllUsersInGroup("groupemailadress@domain.ext");
Logger.log("recognized users are: "+USERS);
Logger.log("unrecognized users are: "+EXTUSERS);
}