#google-apps-script #google-admin-sdk #google-workspace
#google-apps-script #google-admin-sdk #google-workspace
Вопрос:
Я пытаюсь написать сценарий в Google apps script, который приостановит действие учетной записи пользователей, чья учетная запись была неактивна более 120 дней. Но я не хочу, чтобы скрипт удалял учетные записи пользователей, входящих в определенную группу. Ниже приведен сценарий, который я придумал:
/**
* Lists all the users in a domain sorted by first name.
*/
function listAllUsers() {
var contents = [];
var pageToken;
var page;
do {
page = AdminDirectory.Users.list({
customer: 'xyz12345',
orderBy: 'givenName',
maxResults: 100,
pageToken: pageToken
});
var users = page.users;
if (users) {
for (var i = 0; i < users.length; i ) {
var user = users[i];
if(user.suspended==false){
contents.push([user.name.fullName, user.primaryEmail, user.creationTime, user.lastLoginTime]);
}
}
} else {
Logger.log('No users found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
checkUserLoginTime(contents);
}
/**
* Check the user Log in Time of the users.
* @param contents (The array containing the users list)
*/
function checkUserLoginTime(contents) {
//Logger.log(contents);
var usersToSuspend = [];
var timeNow = new Date();
var checkTime = new Date();
checkTime.setDate(checkTime.getDate()-120);
checkTime = new Date(checkTime);
Logger.log('TimeNow:' timeNow);
Logger.log('checktime:' checkTime);
for (var i=0; i<contents.length; i ){
var fullName = contents[i][0];
var email = contents[i][1];
var formattedCreationTime = new Date(contents[i][2]);
var formattedLastLoginTime = new Date(contents[i][3]);
Logger.log(fullName);
Logger.log(email);
Logger.log(formattedCreationTime);
Logger.log(formattedLastLoginTime);
if(formattedCreationTime <= checkTime amp;amp; formattedLastLoginTime <= checkTime){
usersToSuspend.push([fullName, email]);
Logger.log('The user account is Inactive')
//suspendUsers(email);
} else{
Logger.log('The user account is Active')
}
}
}
Этот скрипт отправит в массив все учетные usersToSuspend
записи пользователей, время последнего входа в систему которых превышало 120 дней. Есть ли способ отфильтровать этот массив или прекратить отправку электронных писем в этот массив, которые принадлежат определенной группе, скажем, например: xyz@gmail.com
?
Ответ №1:
Вот функция, которую я использую для проверки членства в группе по электронной почте пользователя.
function testGroupMembership(groupEmail, testUser) {
var group = GroupsApp.getGroupByEmail(groupEmail);
var users = group.getUsers();
for (var u = 0; u < users.length; u ){
if ( users[u].getEmail() === testUser){
return true;
}
return false;
}
Передайте адрес электронной почты пользователя и адрес электронной почты группы. Если пользователь является участником, он возвращает true . Таким образом, вам придется указать «нет» или отменить это, чтобы приостановить действие учетной записи.
Ответ №2:
Сценарий, который, наконец, сработал для меня без создания отдельной функции или комплекса for loops
, выглядит следующим образом:
/**
* Lists all the users in a domain sorted by first name.
*/
function listAllUsers() {
var contents = [];
var pageToken;
var page;
do {
page = AdminDirectory.Users.list({
customer: 'xyz12345',
orderBy: 'givenName',
maxResults: 100,
pageToken: pageToken
});
var users = page.users;
if (users) {
for (var i = 0; i < users.length; i ) {
var user = users[i];
if(user.suspended==false){
contents.push([user.name.fullName, user.primaryEmail, user.creationTime, user.lastLoginTime]);
}
}
} else {
Logger.log('No users found.');
}
pageToken = page.nextPageToken;
} while (pageToken);
checkUserLoginTime(contents);
}
/**
* Check the user Log in Time of the users.
* @param contents (The array containing the users list)
*/
function checkUserLoginTime(contents) {
//Logger.log(contents);
var usersToSuspend = [];
var timeNow = new Date();
var checkTime = new Date();
var group = GroupsApp.getGroupByEmail("xyz@gmail.com"); // gets the group
var users = group.getUsers(); // gets the users in the group
checkTime.setDate(checkTime.getDate()-120);
checkTime = new Date(checkTime);
Logger.log('TimeNow:' timeNow);
Logger.log('checktime:' checkTime);
for (var i=0; i<contents.length; i ){
var fullName = contents[i][0];
var email = contents[i][1];
var formattedCreationTime = new Date(contents[i][2]);
var formattedLastLoginTime = new Date(contents[i][3]);
Logger.log(fullName);
Logger.log(email);
Logger.log(formattedCreationTime);
Logger.log(formattedLastLoginTime);
if(formattedCreationTime <= checkTime amp;amp; formattedLastLoginTime <= checkTime){
if (group.hasUser(email)) { //checks if the user is part of the group
Logger.log(email ' belongs to xyz@gmail.com group');
} else{
usersToSuspend.push([fullName, email]);
Logger.log('The user account is Inactive')
//suspendUsers(email);
}
} else{
Logger.log('The user account is Active')
}
}
}
Group.hasUser(электронная почта) устраняет необходимость запускать for
if
цикл and .