From 1097a94fe9ecce60f4f03db19f8c2a2ced1f20c9 Mon Sep 17 00:00:00 2001 From: keshava-palisetti Date: Mon, 27 Oct 2025 23:01:17 +0530 Subject: [PATCH 1/2] Create Readme.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copy Source User’s Group Memberships to Selected Users --- .../Readme.md" | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 "Server-Side Components/Background Scripts/Copy Source User\342\200\231s Group Memberships to Selected Users/Readme.md" diff --git "a/Server-Side Components/Background Scripts/Copy Source User\342\200\231s Group Memberships to Selected Users/Readme.md" "b/Server-Side Components/Background Scripts/Copy Source User\342\200\231s Group Memberships to Selected Users/Readme.md" new file mode 100644 index 0000000000..37994d8378 --- /dev/null +++ "b/Server-Side Components/Background Scripts/Copy Source User\342\200\231s Group Memberships to Selected Users/Readme.md" @@ -0,0 +1,12 @@ +Background Script — Copy Source User’s Groups to Specific Users + +Working: +It retrieves all groups of the source user. +Loops through all active users (except the source). +Checks whether the user is already a member of that group. +If not, it inserts a new record in sys_user_grmember. + +Note: +sourceUserSysId → sys_id of the user whose groups you want to copy. +The 3 entries in targetUserSysIds → sys_ids of the target users. +It checks for duplicates, so no errors even if the user is already in that group. From 6a8175a6ee640608634d84804fdc4998c94e1d71 Mon Sep 17 00:00:00 2001 From: keshava-palisetti Date: Mon, 27 Oct 2025 23:02:24 +0530 Subject: [PATCH 2/2] ServiceNow background script code snippet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copy Source User’s Group Memberships to Selected Users --- ...er_group_memberships_to_selected_users.js" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "Server-Side Components/Background Scripts/Copy Source User\342\200\231s Group Memberships to Selected Users/copy_source_user_group_memberships_to_selected_users.js" diff --git "a/Server-Side Components/Background Scripts/Copy Source User\342\200\231s Group Memberships to Selected Users/copy_source_user_group_memberships_to_selected_users.js" "b/Server-Side Components/Background Scripts/Copy Source User\342\200\231s Group Memberships to Selected Users/copy_source_user_group_memberships_to_selected_users.js" new file mode 100644 index 0000000000..d5a67d055b --- /dev/null +++ "b/Server-Side Components/Background Scripts/Copy Source User\342\200\231s Group Memberships to Selected Users/copy_source_user_group_memberships_to_selected_users.js" @@ -0,0 +1,50 @@ +// Background script in ServiceNow +// Copies all group memberships from one user to specific other users + +var sourceUserSysId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // sys_id of the source user +var targetUserSysIds = [ + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', // target user 1 + 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', // target user 2 + 'cccccccccccccccccccccccccccccc' // target user 3 +]; + +var sourceGroups = []; + +// Step 1: Fetch all groups of the source user +var grMember = new GlideRecord('sys_user_grmember'); +grMember.addQuery('user', sourceUserSysId); +grMember.query(); + +while (grMember.next()) { + sourceGroups.push(grMember.group.toString()); +} +gs.info('Source user belongs to ' + sourceGroups.length + ' groups.'); + +// Step 2: For each target user, add them to each group (if not already a member) +for (var i = 0; i < targetUserSysIds.length; i++) { + var targetUserId = targetUserSysIds[i]; + + for (var j = 0; j < sourceGroups.length; j++) { + var groupId = sourceGroups[j]; + + var existing = new GlideRecord('sys_user_grmember'); + existing.addQuery('user', targetUserId); + existing.addQuery('group', groupId); + existing.query(); + + if (!existing.next()) { + var newMember = new GlideRecord('sys_user_grmember'); + newMember.initialize(); + newMember.user = targetUserId; + newMember.group = groupId; + newMember.insert(); + + gs.info('✅ Added user [' + targetUserId + '] to group [' + groupId + ']'); + } else { + gs.info('ℹ️ User [' + targetUserId + '] already in group [' + groupId + ']'); + } + } +} + +gs.info('--- Group replication completed successfully ---'); +