- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-23-2024 04:39 AM
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);
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-26-2024 01:01 AM
Hello @JP6
If this solution worked for you, can you please mark it as an accepted solution.
Thank You
Juhi Poddar
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-23-2024 05:59 AM
so what did you debug and what's your analysis?
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-23-2024 08:14 AM
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-24-2024 10:19 PM
Thanks JuhiPoddar, only remove users part is not working
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-24-2024 10:37 PM
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