Scheduled Job to add /remove users from a group

JP6
Tera Contributor

Hi All,

I have created below script to 1) find all the ‘Group’' managers 2) validate if they are part of another group ‘ITSM-Managers’ 

and 3) retrieve the list of ‘Group’ managers who are not present in the 'ITSM-Managers’ group

 

I have a requirement to create a schedule job to add/remove users to execute/trigger based on below condition.

-Add users who are not present in the 'ITSM-Managers’ group.

-Remove users from ITSM-Managers’ group if they are not Group managers 

 

 var out = [];
    var grManagers = new GlideRecord("sys_user_group");
    grManagers.addEncodedQuery("manager!=NULL");
    grManagers.query();
    while (grManagers.next()) {
        //loop through IT Managers group members to check if they are part of or not
        var member = new GlideRecord("sys_user_grmember");
        member.addQuery("group", "c38f00f4530360100999ddeeff7b1298"); //sys_id of the ITSM-Managers group
        member.query();
        while (member.next()) {
            if (member.getValue("user")! == grManagers.getValue("manager")) {
                out.push(member.getDisplayValue("user"));
                
               
            }
        }

    }
    gs.info("Managers who are not in the  ITSM-Managers group::" + " " + out);

 

 

 

1 ACCEPTED SOLUTION

Hello @JP6 

 

If this solution worked for you, can you please mark it as an accepted solution.

 

Thank You

Juhi Poddar

 

View solution in original post

6 REPLIES 6

Ankur Bawiskar
Tera Patron
Tera Patron

@JP6 

so what did you debug and what's your analysis?

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

Juhi Poddar
Kilo Patron

Hello @JP6 

The script you provided is a good starting point for identifying discrepancies between group managers and the ITSM-Managers group membership. However, there are a few issues and improvements to address:

  • Logical Error:
    • The condition if (member.getValue("user")! == grManagers.getValue("manager")) is invalid; use !== for inequality.
  • Query Optimization:
    • Instead of querying all ITSM-Managers group members for each manager, fetch all members at once and compare efficiently.

Optimized script:

 

(function executeJob() {
    var ITSM_GROUP_ID = "c38f00f4530360100999ddeeff7b1298"; // sys_id of the ITSM-Managers group

    // 1. Find all group managers
    var grManagers = new GlideRecord("sys_user_group");
    grManagers.addNotNullQuery("manager");
    grManagers.query();
    var groupManagers = [];
    while (grManagers.next()) {
        groupManagers.push(grManagers.getValue("manager"));
    }

    // 2. Find all current members of the ITSM-Managers group
    var grITSMMembers = new GlideRecord("sys_user_grmember");
    grITSMMembers.addQuery("group", ITSM_GROUP_ID);
    grITSMMembers.query();

    var itsmMembers = [];
    var itsmMemberSysIds = [];
    while (grITSMMembers.next()) {
        itsmMembers.push(grITSMMembers.getValue("user"));
        itsmMemberSysIds.push(grITSMMembers.sys_id);
    }

    // 3. Add missing managers to ITSM-Managers group
    groupManagers.forEach(function(manager) {
        if (!itsmMembers.includes(manager)) {
            var newMember = new GlideRecord("sys_user_grmember");
            newMember.initialize();
            newMember.group = ITSM_GROUP_ID;
            newMember.user = manager;
            newMember.insert();
            gs.info("Added user " + manager + " to ITSM-Managers group.");
        }
    });

    // 4. Remove users from ITSM-Managers group who are not group managers
    itsmMembers.forEach(function(user, index) {
        if (!groupManagers.includes(user)) {
            var grRemove = new GlideRecord("sys_user_grmember");
            if (grRemove.get(itsmMemberSysIds[index])) {
                grRemove.deleteRecord();
                gs.info("Removed user " + user + " from ITSM-Managers group.");
            }
        }
    });

    gs.info("Scheduled Job for ITSM-Managers group synchronization completed.");
})();

 

Hope this helps!

 

"If you found my answer helpful, please like and mark it as an "accepted solution". It helps others find the solution more easily and supports the community!"

 

Thank You
Juhi Poddar

 

JP6
Tera Contributor

Thanks  JuhiPoddar, only remove users part is not working 

// 4. Remove users from ITSM-Managers group who are not group managers
    itsmMembers.forEach(function(user, index) {
        if (!groupManagers.includes(user)) {
            var grRemove = new GlideRecord("sys_user_grmember");
            if (grRemove.get(itsmMemberSysIds[index])) {
                grRemove.deleteRecord();
                gs.info("Removed user " + user + " from ITSM-Managers group.");
            }
        }
    });

Hello @JP6 

Please try this 

itsmMembers.forEach(function (user, index) {
    if (!groupManagers.includes(user)) {
        var grRemove = new GlideRecord("sys_user_grmember");
        grRemove.addQuery("group", ITSM_GROUP_ID);
        grRemove.addQuery("user", user);
        grRemove.query();
        if (grRemove.next()) {
            grRemove.deleteRecord();
            gs.info("Removed user " + user + " from ITSM-Managers group.");
        } else {
            gs.warn("Failed to find record for user " + user + " in ITSM-Managers group for removal.");
        }
    }

 

"If you found my answer helpful, please like and mark it as an "accepted solution". It helps others find the solution more easily and supports the community!"

 

Thank You
Juhi Poddar