Background script

JP6
Tera Contributor

Hi All,

 

I am trying to build a script to find all the ‘Group’ managers and validate if they are part of another group ‘ITSM-Managers’. And want to retrieve the list of ‘Group’ managers who are not present in the 'ITSM-Managers’ group .

 

Please assist on how to go about this .

4 REPLIES 4

Mark Manders
Mega Patron

Something like this?

var nonITSMManagers = [];

var groupGR = new GlideRecord('sys_user_group');
groupGR.query();
while (groupGR.next()) {
    var managerSysId = groupGR.getValue('manager');
    if (managerSysId) {
        var itsmGroupMemberGR = new GlideRecord('sys_user_grmember');
        itsmGroupMemberGR.addQuery('group.name', 'ITSM-Managers'); // or use the sys_id of the group to be sure
        itsmGroupMemberGR.addQuery('user', managerSysId);
        itsmGroupMemberGR.query();
        if (!itsmGroupMemberGR.hasNext()) {
            nonITSMManagers.push(managerSysId);
        }
    }
}
if (nonITSMManagers.length > 0) {
    gs.info('Managers not in ITSM-Managers group:');

    var nonITSMManagerGR = new GlideRecord('sys_user');
    nonITSMManagerGR.addQuery('sys_id', 'IN', nonITSMManagers.join(','));
    nonITSMManagerGR.query();

    while (nonITSMManagerGR.next()) {
        gs.info('Manager: ' + nonITSMManagerGR.getValue('name') + ' (Sys ID: ' + nonITSMManagerGR.getValue('sys_id') + ')');
    }
} else {
    gs.info('All group managers are part of the ITSM-Managers group.');
}

Please mark any helpful or correct solutions as such. That helps others find their solutions.
Mark

Jitendra Diwak1
Kilo Sage

Hi @JP6,

 

Please try below script:

 

(function() {
    // Define the target group name
    var targetGroupName = 'ITSM-Managers';

    // Retrieve the Sys ID of the 'ITSM-Managers' group
    var targetGroup = new GlideRecord('sys_user_group');
    targetGroup.addQuery('name', targetGroupName);
    targetGroup.query();
    if (!targetGroup.next()) {
        gs.info('The group "' + targetGroupName + '" does not exist.');
        return;
    }
    var targetGroupId = targetGroup.sys_id;

    // Retrieve all groups and their managers
    var groupGR = new GlideRecord('sys_user_group');
    groupGR.query();
    while (groupGR.next()) {
        var groupName = groupGR.name;
        var managerSysId = groupGR.manager;

        // Check if the group has a manager
        if (managerSysId) {
            var managerGR = new GlideRecord('sys_user');
            if (managerGR.get(managerSysId)) {
                // Check if the manager is a member of the target group
                var userGR = new GlideRecord('sys_user_grmember');
                userGR.addQuery('group', targetGroupId);
                userGR.addQuery('user', managerSysId);
                userGR.query();
                
                if (!userGR.next()) {
                    // If the manager is not a member of the target group
                    gs.info('Manager ' + managerGR.name + ' (Sys ID: ' + managerSysId + ') from group "' + groupName + '" is NOT a member of the "' + targetGroupName + '" group.');
                }
            }
        }
    }
})();

 

Please accept my solution if it works for you and thumps up.

 

Thanks

Jitendra

Please accept my solution if it works for and thumps up.

Hemanth M1
Giga Sage
Giga Sage

Hi @JP6 ,

 

Here u go,

 

//get ALL group members
var out = [];
var grManagers = new GlideRecord("sys_user_group");
grManagers.addEncodedQuery("manager!=NULL")
grManagers.query();
while (grManagers.next()) {
    //gs.info(grManagers.getValue("manager"))
    //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"); //replace sys_id of the ITSM-Managers group
    member.query();
    while (member.next()) {
		//gs.info(grManagers.getValue("sys_id"))
        if (member.getValue("user") == grManagers.getValue("manager")) {
            out.push(member.getDisplayValue("user"));
        }
    }

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

 

Output:

HemanthM1_0-1723115740040.png

 

 

Hope this helps!!

 

 

Accept and hit Helpful if it helps.

Thank you,
Hemanth
Certified Technical Architect (CTA), ServiceNow MVP 2024, 2025

Ionut Carp
Giga Sage

Hi, 

 

Here is short script for obtaining the list of user sysIds which are managers of groups, but not part of ITSM-Managers.

 

var itGroupSysId = ''; //add here your it managers group sys id

gs.print(getNonItManagers());

function getNonItManagers() {
	return new global.GlideQuery('sys_user_grmember')
		.where('group', itGroupSysId)
		.select('user')
		.map(function (grMember){ return grMember.user; })
		.flatMap(function (userId){
			return new global.GlideQuery('sys_user_group')
				.where('active', true)
				.select('manager')
				.map(function (group) { 
					if(userId != group.manager){
						return group.manager;
					}
				});
		})
		.reduce(function (arr, e){
			if(arr.indexOf(e) === -1){
				arr.push(e);
			}
			return arr;
		}, []);
}

Please mark my response as helpful or correct if this solved your issue.

 

Kind regards,

Ionut Carp