Skip to content

Commit 037ef75

Browse files
Copy Source User’s Group Memberships to Selected Users (#2548)
* Create Readme.md Copy Source User Group Memberships to Selected Users * ServiceNow Background script code snippet Copy Source User’s Group Memberships to Selected Users * Update copy_source_user_group_memberships_to_selected_users.js Updating the code to remove junk characters
1 parent bb5d494 commit 037ef75

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Background Script — Copy Source User’s Groups to Specific Users
2+
3+
Working:
4+
It retrieves all groups of the source user.
5+
Loops through all active users (except the source).
6+
Checks whether the user is already a member of that group.
7+
If not, it inserts a new record in sys_user_grmember.
8+
9+
Note:
10+
sourceUserSysId → sys_id of the user whose groups you want to copy.
11+
The 3 entries in targetUserSysIds → sys_ids of the target users.
12+
It checks for duplicates, so no errors even if the user is already in that group.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Background script in ServiceNow
2+
// Copies all group memberships from one user to specific other users
3+
4+
var sourceUserSysId = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // sys_id of the source user
5+
var targetUserSysIds = [
6+
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', // target user 1
7+
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', // target user 2
8+
'cccccccccccccccccccccccccccccc' // target user 3
9+
];
10+
11+
var sourceGroups = [];
12+
13+
// Step 1: Fetch all groups of the source user
14+
var grMember = new GlideRecord('sys_user_grmember');
15+
grMember.addQuery('user', sourceUserSysId);
16+
grMember.query();
17+
18+
while (grMember.next()) {
19+
sourceGroups.push(grMember.group.toString());
20+
}
21+
gs.info('Source user belongs to ' + sourceGroups.length + ' groups.');
22+
23+
// Step 2: For each target user, add them to each group (if not already a member)
24+
for (var i = 0; i < targetUserSysIds.length; i++) {
25+
var targetUserId = targetUserSysIds[i];
26+
27+
for (var j = 0; j < sourceGroups.length; j++) {
28+
var groupId = sourceGroups[j];
29+
30+
var existing = new GlideRecord('sys_user_grmember');
31+
existing.addQuery('user', targetUserId);
32+
existing.addQuery('group', groupId);
33+
existing.query();
34+
35+
if (!existing.next()) {
36+
var newMember = new GlideRecord('sys_user_grmember');
37+
newMember.initialize();
38+
newMember.user = targetUserId;
39+
newMember.group = groupId;
40+
newMember.insert();
41+
42+
gs.info('Added user [' + targetUserId + '] to group [' + groupId + ']');
43+
} else {
44+
gs.info('User [' + targetUserId + '] already in group [' + groupId + ']');
45+
}
46+
}
47+
}
48+
49+
gs.info('--- Group replication completed successfully ---');
50+

0 commit comments

Comments
 (0)